java finalize逃脱_关于Java中的finalize()方法
java提供finalize()方法,垃圾回收器準備釋放內存的時候,會先調用finalize()。
(1).對象不一定會被回收。
(2).垃圾回收不是析構函數。
(3).垃圾回收只與內存有關。
(4).垃圾回收和finalize()都是靠不住的,只要JVM還沒有快到耗盡內存的地步,它是不會浪費時間進行垃圾回收的。
垃圾收集器在進行垃圾收集的時候會自動呼叫對象的finalize方法,用來進行一些用戶自定義的非內存清理工作,因為垃圾收集器不會處理內存以外的東西。所以,有的時候用戶需要定義一些清理的方法,比如說處理文件和端口之類的非內存資源。
finalize的工作原理應該是這樣的:一旦垃圾收集器準備好釋放對象占用的存儲空間,它首先調用finalize(),而且只有在下一次垃圾收集過程中,才會真正回收對象的內存.所以如果使用finalize(),就可以在垃圾收集期間進行一些重要的清除或清掃工作.
finalize()在什么時候被調用?
有三種情況
1.所有對象被Garbage Collection時自動調用,比如運行System.gc()的時候.
2.程序退出時為每個對象調用一次finalize方法。
3.顯式的調用finalize方法
除此以外,正常情況下,當某個對象被系統收集為無用信息的時候,finalize()將被自動調用,但是jvm不保證finalize()一定被調用,也就是說,finalize()的調用是不確定的,這也就是為什么sun不提倡使用finalize()的原因。
理解finalize( ) 正好在垃圾回收以前被調用非常重要。例如當一個對象超出了它的作用域時,finalize( ) 并不被調用。這意味著你不可能知道何時——甚至是否——finalize( ) 被調用。因此,你的程序應該提供其他的方法來釋放由對象使用的系統資源,而不能依靠finalize( ) 來完成程序的正常操作。
總結
以上是生活随笔為你收集整理的java finalize逃脱_关于Java中的finalize()方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java ancestor_java –
- 下一篇: java 原生数据类型的转换_Java基