垃圾回收,对象在内存状态
垃圾回收机制只负责回收堆内存中的对象,不会回收任何物理资源(如数据库连接,网络IO等资源)
程序无法精准控制垃圾回收的运行,垃圾回收会在任何时候进行,当对象永久的失去引用后,系统会在合适的时候回收它的内存
在垃圾回收机制回收任何对象之前,总会先调用它的finalize()方法,该方法可能使对象重新复活,导致垃圾回收机制取消回收
对象在内存中的状态:(根据被引用的状态)
可达状态:一个以上的引用变量引用它
可恢复状态:不再有任何引用变量引用它,垃圾回收机制准备回收它,回收前调用finalize()方法,复活则可达,否则进入不可达
不可达状态:对象与所有引用变量联系切断,finalize后也没变可达,则这个对象永久的失去引用,变成不可达,系统真正回收该对象所占有的资源
强制垃圾回收:(通知系统进行回收,具体不确定)
调用System类的gc()静态方法:System.gc()
调用Runtime对象的gc()实例方法:Runtime.getRuntime().gc()
finalize方法:
永远不要主动调用finalize方法,留给垃圾回收机制调用
finalize方法是否调用具有不确定性,不能当成一定调用
JVM执行finalize方法出现异常时,垃圾回收机制不报告异常,程序继承执行