java学习之路的自我回顾4(类3)
来源:互联网 发布:淘宝优惠群公告怎么写 编辑:程序博客网 时间:2024/05/18 02:17
对象与垃圾回收
java的垃圾回收机制我记得之前也写到过,ta有以下几个特点
1.垃圾回收机制只回收堆内存中的数据,而不会回收物理数据,比如数据库连接,网络IO连接等
2.并不能控制垃圾回收机制,程序只会在没有引用对象引用时,才会启动垃圾回收机制
3.在垃圾回收机制回收对象前,总会启动finalize方法,该方法有可能重新给予对象一个引用,从而让该对象复活
这里的前面2条还是比较好理解的,第3条我也查了查,简单来说就是当程序决定释放一个对象时,由于垃圾回收只知道回收由new创建的资源,而没办法释放一些“特殊的内存”,所以需要调用finalize方法来引用该对象,并在下一次回收机制执行前对“特殊内存”进行处理,比如关闭输出输入流什么的,不过有一点值得注意,jvm并不能保证这个方法总被调用
对象的状态
在堆内存中,被引用的对象的状态一共有三种:激活状态,去活状态,死亡状态。
1.激活状态 顾名思义,当一个对象被创建时,会有一个或多个引用变量指向ta,这时候该对象即为激活状态
2.去活状态 没有一个引用变量指向的对象,这时ta的状态就是去活状态,这时候,垃圾回收机制会开始准备回收这些对象,这时系统会调用所有去活对像的finalize方法,用以清理资源,如果此时让一个引用变量指向对象的话,该对象就会变为激活状态,不然就会进入死亡状态
3.死亡状态 顾名思义,在系统执行fialize方法后,还是没有一个引用变量指向该对象时,该对象便进入了死亡状态,这时候系统才会去释放ta的内存
强制垃圾回收机制
系统在运行时,什么时候调用finalize方法,什么时候回收内存,这些都是透明的。程序也只能控制一下一个对象是否被其他引用变量引用,那么我们要是想要在这个时刻立即进行垃圾回收该怎么办呢。
确实是有方法的
1.调用System.gc()方法
2.调用Runtime.getRuntime().gc()方法
不过有一点值得注意的是,在调用这2个方法时,这2个方法都只是建议系统进行垃圾回收,而系统完全可以无视这个建议,所以是否真的执行了,也只有程序知道了
引用的种类
java中,引用也分成几个大类:强引用,软引用,弱引用,虚引用
具体的也不再赘述,我觉得我要是真写的话就是在抄书了。
修饰符适用范围
类的回顾大致告一段落
这里面值得深入学习的还有很多,估计以后看到现在的自己的所思所想,会很有趣吧,233333
- java学习之路的自我回顾4(类3)
- java学习之路的自我回顾3(类2)
- java学习之路的自我回顾2(类)
- java学习之路的自我回顾5(集合)
- java学习之路的自我回顾1
- java学习之路的自我回顾6(泛型1)
- Java研发学习之路小回顾
- Java学习(回顾)笔记之day1
- Java学习(回顾)笔记之day2
- Java学习(回顾)笔记之day3
- Java学习(回顾)笔记之day4
- 自我救赎之路--Java(数据处理)
- oracle 自我学习之路
- 自我学习之es6(3)
- 后台学习之路(一):Java基础回顾
- 回顾嵌入式学习之路
- HTML5学习之路回顾
- 一个懒惰的人的自我学习之路(自嘲)
- 深入浅出多线程(4)对CachedThreadPool OutOfMemoryError问题的一些想法
- C++实现圆角矩形
- GPS NMEA数据解析
- 成绩管理系统(链表)
- Android监测手指上下左右滑动屏幕
- java学习之路的自我回顾4(类3)
- NFS——共享设置及远程挂载
- android Handler与Message(多线程间传递消息)
- SQL2005四个排名函数(row_number、rank、dense_rank和ntile)的比较
- LeetCode Contains Duplicate
- oracle 视图信息在数据库中的存储详解
- android 使用TextView/EditText应该注意的地方
- Intent(意图)
- chapter8test3