对象的自动清除
- 也叫垃圾回收(garbage collection)
- 对象回收是由Java虚拟机的垃圾回收线程来完成的。
- 系统如何判断一个对象是否为垃圾?
- 任何对象都有一个引用计数器,当其值为0时,说明该对象可以回收。
System.gc()方法
- 它是System类的static方法
- 它可以要求系统进行垃圾回收,但仅仅只是“建议”,即不能强制系统进行垃圾回收。
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 scanner = new Scanner(...)){
...
}
会自动调用其close()
方法,相当于
finally{
Scanner.close();
}