【学习笔记】 唐大仕—Java程序设计 第5讲 深入理解Java语言之5.4 对象清除与垃圾回收
/**
* 对象清除与垃圾回收
* @author cnRicky
* @date 2018.11.10
*/
对象清除与垃圾回收
对象清除
- 我们知道:new创建对象
- 那么如何销毁对象?
- Java中是自动清除
- 不需要使用delete等方法人为销毁它
对象的自动清除
-
垃圾回收(garbage collection)
-
对象回收是由Java虚拟机的垃圾回收线程来完成的
-
为什么系统知道对象是否为垃圾?
- 任何对象都有一个引用计数器,当其值为0时,说明该对象可以回收
System.gc()方法
- System.gc()方法
- 它是System类的static方法
- 它可以要求系统进行垃圾回收
- 但它仅仅只是“建议(suggest)”
finalize()方法
-
Java中没有“析构方法(destructor)”
-
但Object的finalize()有类似功能
- 系统在回收时会自动调用对象的finalize()方法
- protected void finalize() throws Throwable{}
-
子类的finalize()方法
- 可以在子类的finalize()方法释放系统资源
- 一般来说,子类的finalize()方法中应该调用父类的finalize()方法,以保证父类的清理工作能够正常进行
try-with-resources
- 由于finalize()方法的调用时机并不确定,所以一般不用finalize()
- 关闭打开文件、清除一些非内存资源等工作需要进行处理
- 可以使用try-with-resources语句(JDK1.7 以上)
- 对于实现了java.lang.AutoCloseable的对象
- try( Scanner in = new Scanner( ... ) ){ ...... }
- 会自动调用其close()方法,相当于
- finally{ in.close(); }