垃圾回收,对象在内存状态

垃圾回收机制只负责回收堆内存中的对象,不会回收任何物理资源(如数据库连接,网络IO等资源)

程序无法精准控制垃圾回收的运行,垃圾回收会在任何时候进行,当对象永久的失去引用后,系统会在合适的时候回收它的内存

在垃圾回收机制回收任何对象之前,总会先调用它的finalize()方法,该方法可能使对象重新复活,导致垃圾回收机制取消回收

对象在内存中的状态:(根据被引用的状态)

可达状态:一个以上的引用变量引用它

可恢复状态:不再有任何引用变量引用它,垃圾回收机制准备回收它,回收前调用finalize()方法,复活则可达,否则进入不可达

不可达状态:对象与所有引用变量联系切断,finalize后也没变可达,则这个对象永久的失去引用,变成不可达,系统真正回收该对象所占有的资源

强制垃圾回收:(通知系统进行回收,具体不确定)

调用System类的gc()静态方法:System.gc()

调用Runtime对象的gc()实例方法:Runtime.getRuntime().gc()

finalize方法:

永远不要主动调用finalize方法,留给垃圾回收机制调用

finalize方法是否调用具有不确定性,不能当成一定调用

JVM执行finalize方法出现异常时,垃圾回收机制不报告异常,程序继承执行

  

原文地址:https://www.cnblogs.com/zawjdbb/p/6925896.html