日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java中finalizer终结方法学习心得

發布時間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java中finalizer终结方法学习心得 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近在看java的中finalizer終結方法,也就是用來釋放內存的,但這絕對和C++中的析構函數不相同

C++中的析構函數是用來回收對象所占用的資源的方法,而在java中,當一個對象不可到達時(也就是重堆棧和靜態存儲區開始,由引用開始,尋找實體對象),垃圾回收器會釋放該對象所相關聯的存儲空間,并不需要程序員的編碼

對于finalizer方法的使用,就只有一條建議--------------盡量不要使用

effective? java中有這幾個結論

1?? 不應該依賴終結方法來更新重要的持久狀態

如用finalizer方法釋放數據庫上的永久鎖,而且finalizer方法是不一定會被調用的,只有到了內存滿了系統才會調用垃圾回收

2??? 使用終結方法有非常嚴重的性能損失

而且性能損失還有點大

?但有兩種情況下可以使用

1.當對象所有者忘記調用顯示的終結方法(如connection,inputstream,outputstream的close方法和Timer中的cancel方法,這只是一種保險的方法

? 完全可以由程序員的細心避免的,所以使用這些類的時候千萬要記住調用顯示的終結方法

2本地對象? 也就是其他語言編寫的對象托管給java管理,當垃圾回收器回收java對象時,那些本地對象占用的資源是不會回收的,所以這里就需要調用對象的finalizer方法

在說說垃圾回收器

垃圾回收器是用來回收java中無用的對象,也就是不可到達對象,他有很多種機制

1 引用計數器

每一個對象都會用一小塊存儲空間來存放引用計數器,當對象被引用時,計數器加1,當對象失去引用或對象引用被置為null時減1,當垃圾回收器檢測到對象的引用計數器為0時

垃圾回收器釋放資源,大家也許會想到資源釋放后那空間是不連續的,所以垃圾回收器還有整理空間的功能,讓空間連續

ps:這里會有一個缺陷,當幾個對象引用形成一個循環時,這些對象本來應該被釋放的,但由于他的引用計數器不為0,所以垃圾回收器不會釋放對象的內存資源

2停止-復制

垃圾回收器回重堆棧和靜態存儲區開始檢查所有引用,當對象是可到達時,就會把可到達的所有對象復制到另外一塊存儲空間上,而不可到達的便成為垃圾,這種機制的效率是非常低的,因為他會先停止程序,然后執行復制操作,復制的同時還必修改所有引用.完成復制后,空間是連續的,所以就不需要整理。當垃圾(不可到達對象)很少時,這種機制是非常不劃算的,所以有了下面的方法

3標記-清掃

速度想當面慢,但垃圾很少時相對于停止-復制是相當快的

從堆棧和靜態存儲區開始,遍歷所有引用,找出存活(可到達)對象并標記,當標記完后開始清理任務,清理后空間是不連續的,所以垃圾回收器還必須整理

如果只用一種機制,是不靈活的

所以有了第4種機制

4自適應

對象很穩定時用標記-清掃

垃圾回收器跟蹤標記清掃,當碎片很多的時候用停止-復制

如過你發現我有說的不對的地方,歡迎說出來大家一起分享

轉載于:https://www.cnblogs.com/evanlee/archive/2011/05/16/2048034.html

總結

以上是生活随笔為你收集整理的java中finalizer终结方法学习心得的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。