Java中的垃圾回收
首先請謹記以下三點
- Your objects might not get garbage collected.
- Garbage collection is not destruction.
- Garbage collection is only about memory.
清理:終結(jié)處理和垃圾回收——finalize()
Java有垃圾回收器負責回收無用對象(前提是該對象是
new出來的)占用的內(nèi)存,但是對于那些不是使用new獲得的特殊對象內(nèi)存資源,該如何回收它們占用的內(nèi)存資源呢?
答案是:Java允許在類中定義一個名為finalize()的方法。
其工作原理的“假定”是這樣的:
- 一旦垃圾回收器準備好釋放對象占用的內(nèi)存資源時,將首先調(diào)用對象的
finalize()方法。 - 在下一次垃圾回收動作發(fā)生時,真正地釋放對象所占用的內(nèi)存資源。
所以,使用finalize()能夠幫助你做一些真正重要的清理工作。
使用以下代碼可以使finalize()總會被調(diào)用:
System.gc();
System.runFinalization();
《Effective Java》中有這么一句話:
但是,請注意一定不要在Java中過多使用
finalize()!最好避免使用finalize(),因為它無法預料,通常來說使比較危險的,總之使多余的。