后結合自己的一些項目經驗,簡單總結下關于java的垃圾回收問題的看法,有需要的小伙伴可以參考下"/>

一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - 簡單談談Java垃圾回收

簡單談談Java垃圾回收

2020-05-04 13:59weixueyuan JAVA教程

本文是看了James Gosling的<>后結合自己的一些項目經驗,簡單總結下關于java的垃圾回收問題的看法,有需要的小伙伴可以參考下

好久沒看關于java的書了,最近,看了James Gosling的<<Java程序設計語言>>,做了一些讀書筆記。這部分是關于垃圾回收的。

一. 垃圾回收

對象是使用new創建的,但是并沒有與之相對應的delete操作來回收對象占用的內存。當我們完成對某個對象的使用時,只需停止該對象的引用:

->將引用改變為指向其他對象
->將引用指向null
->從方法中返回, 使得該方法的局部變量不復存在

要點:

->當我們從任何可執行代碼都無法到達某個對象時,它所占用的空間就可以被回收。
->垃圾回收意味著我們永遠不用擔心出現虛懸引用(dangling reference)。虛懸引用,指得是引用已經被刪除的內存空間。在那些程序員可以直接控制何時刪除對象的系統中,會存在這樣的問題。
->垃圾回收器模型:引用計數器法(不能解決循環引用),標記-清除(mark-and-sweep)。

二. 總結

finalize方法

->在垃圾回收器確定該對象是不可達的且該對象的空間將被回收之后,垃圾回收器就會調用這個方法。
->這個方法可以清除該對象所使用的所有非內存資源,對每一個對象最多只能調用一次,即使在這個方法的執行使得該對象重新變為可達之后又馬上會再次變為不可達的情況下,該方法也只能調用一次。
->finalize方法可以在任何特定的時間段內被調用,它也可能永遠不會被調用(java虛擬機結束)。

覆寫finalize方法

->當一個對象變成垃圾時,它所引用的其他對象也很有可能會變成垃圾。這些垃圾可能在調用我們編寫的finalize方法之前就已經被終結了,因此它們可能處于不可預知的狀態。
->覆寫finalize方法是,加上super.finalize方法。最好加在finally字句里面。保證其超類中聲明的部分內容也可以被終結。

三. 與垃圾回收器交互的相關類和方法

類:Runtime.getRuntime(), System
方法:gc(), runFinalization(), freeMemory(), totalMemory(), maxMemory()
System類支持靜態的gc()和runFinalization()方法,它們將調用當前Runtime對象上的相應方法。

四. 可達性狀態和引用對象

對象只有在沒有任何引用指定它的時候才可以被當作垃圾回收,但有時我們可能希望在仍舊有選定引用指向對象時,將該對象作為垃圾回收掉。

引用對象的唯一用途就是維護對另一個被稱為指稱物(referent)的對象的引用。通常我們通過字段或者局部變量來維護對對象的引用,但是現在我們可以維護對引用對象的直接引用,而該引用對象包裝了我們實際需要的對象。垃圾回收器可能判斷出對某個對象的殘留引用是否都是經由引用對象面引用到該對象的,因此它可以決定是否要回收該對象。引用對象的強度將決定垃圾回收器的行為,普通的引用都是強度最大的引用。

Reference類

->包:java.lang.ref
->典型方法: get(), clear(), enqueue(), isEnqueued()

引用和可達性強度

->對象是強可達的(strongly reachable):普通的引用
->對象是軟可達的(softly reachable):SoftReference
->對象是弱可達的(weakly reachable):WeakReference
->對象是虛可達的(phantom reachable):PhantomReference
->對象是不可達的:沒有引用鏈接
一旦對象變為弱可達的(或者列弱),它就可以被終結。如果在終結之后該對象是不可達的,那么它就可以被回收了。

對象可達性階段會觸發垃圾回收器對相關的引用對象類型做出適當的行為:

->軟可達對象可能會任憑垃圾回收器去回收。我們可確定的是所有對軟可達對象的SoftReference都會在拋出outofMemoryError錯誤這前被清除。
->弱可達對象將會被垃圾回收器回收。
->虛可達對象并不是真正意義上的可達,因為無法通過PhantomReference訪問其指稱對象,其get方法總是返回null。但是虛引用的存在可以防止對象在顯式清除虛引用之前被回收。虛引用使我們可以處理那些finalize方法已經被調用過的對象,從而可以安全地認為它們是"死"的。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品香蕉夜间视频免费播放 | 国色天香社区视频免费观看3 | tobu8中国在线观看免费视频 | 太紧太深了受不了黑人 | b站免费 | 67194最新网址 | 国产精品麻豆久久99 | 色cccwww| www.av在线视频 | 西西人体大胆啪啪私拍色约约 | 扒开放荡老师裙子猛烈的进入 | 97se亚洲国产综合自在线观看 | 9191精品国产观看 | 亚洲AV国产国产久青草 | bt天堂午夜国产精品 | 麻豆夏晴子 | 男人猛戳女人下部30分钟 | 午夜大片在线观看 | 第一次做m被调教经历 | 免费特黄一级欧美大片在线看 | 亚洲国产一区二区三区青草影视 | 亚洲第一区在线观看 | 久久久免费观看 | 色婷婷婷婷| 我的青梅竹马是消防员2季未增删免费 | 精品国产mmd在线观看 | 熟睡中的麻麻大白屁股小说 | 毛片一级免费 | 性xx色3d动画xx无尽 | 羞羞一区二区三区四区片 | 国产欧美日韩图片一区二区 | 亚裔maricahase和黑人 | 女仆掀起蕾丝裙被打屁股作文 | 单身男女韩剧在线看 | 国产在线精品一区二区高清不卡 | 日日操免费视频 | 国产欧美日韩专区 | 国产激情一区二区三区四区 | 亚洲AV中文字幕无码久久 | 亚洲精品国产在线网站 | futa巨大好爽好长 |