Java中gcRoot和參考型別

來源:互聯網
上載者:User

標籤:就是   注意   其它   一個   直接   包括   解決   標記   針對   

看到一個老問題,Java是如何判定回收哪些對象的?

答:從gcRoot根搜尋不可達,且標記清理一次之後仍沒有被複活的對象,會被認定為垃圾對象進行清理。注意在Java中沒有對象的範圍,只有對象的引用的範圍。Java記憶體回收沒有採用引用計數演算法,因為它不好解決循環參考問題。Java垃圾演算法實際上是標記出那些對象是被引用在用的,其它沒被標記的就是沒用的可以回收,而不是直接找出哪些對象是沒用的。

那麼,哪些對象可以作為gcRoot呢?

它其實是一組根引用,主要包括虛擬機器棧中的局部變數表(實際就是所有正在被調用的方法等參數局部變數等),類的靜態屬性引用,常量對象引用,本地方法棧中對象引用。實際上Java記憶體回收主要是針對堆記憶體的,這些引用則來自於JVM運行時資料區的其它幾部分:虛擬機器棧,本地方法區,方法區。

Java中參考型別包含哪幾類,有什麼用?

最常用到的是強引用,只有這種引用存在,記憶體回收時就不會清理它指向的對象。其次是軟引用,只有在記憶體回收記憶體空間不足時才會回收這類引用指向的對象,多用在緩衝對象中。再其次是弱引用,只要發生記憶體回收就會被回收。最後是虛引用,是參考關聯性最弱的一種。

Java中gcRoot和參考型別

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.