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

0 0
原创粉丝点击