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