2020久久超碰欧美精品最新亚洲欧美日韩久久精品,国产福利电影一区二区三区,亚洲欧美日韩一区在线观看,亚洲国产欧美日韩欧美特级,亚洲欧美日韩成人一区久久,欧美日韩精品一区二区三区不卡,国产欧美日韩va另类影音先锋,亚洲欧美日韩久久精品,亚洲欧美日韩国产成人精品影院,亚洲国产欧美日韩精品一区二区三区,欧美日韩国产成人高清视频,日韩久久精品国产免费观看频道,久久人人爽人人爽从片av高清,国产精品综合一区二区

首頁技術文章正文

Java中的垃圾回收機制是什么?哪些對象會被回收?

更新時間:2021-05-21 來源:黑馬程序員 瀏覽量:

1577370495235_學IT就到黑馬程序員.gif

(1)問題分析:

什么樣的對象會被當做垃圾回收?

如何校驗對象是否被回收?

怎樣通知垃圾回收器回收對象

(2)核心答案講解:

1)問題 : 什么樣的對象會被當做垃圾回收?

當一個對象的引用(地址)沒有變量去記錄的時候, 該對象就會成為垃圾對象, 并在垃圾回收器空閑的時候對其進行清掃.

2)問題 : 如何校驗對象是否被回收?

可以重寫Object類中的finalize方法

這個方法在垃圾回收器執行的時候, 被回收器自動調用執行的.

3)問題 : 怎樣通知垃圾回收器回收對象

可以調用System類的靜態方法gc( );

通知垃圾回收器去清理垃圾

(3)問題擴展:

如何判斷哪些對象需要回收呢?

1)引用計數算法(java中不是使用此方法)

每個對象中添加一個引用計數器,當有別人引用它的時候,計數器就會加1,當別人不引用它的時候,計數器就會減1,當計數器為0的時候對象就可以當成垃圾。算法簡單,但是最大問題就是在循環引用的時候不能夠正確把對象當成垃圾。

   public class Demo1_Gc {
       public static void main(String[] args) {
         Demo object1 = new Demo();
         Demo object2 = new Demo();

         object1.object = object2;
         object2.object = object1;

         object1 = null;
         object2 = null;
       }
     }


2)根搜索方法

這是JVM一般使用的算法, 根搜索算法是從離散數學中的圖論引入的,程序把所有的引用關系看作一張圖,從一個節點GC ROOT開始,尋找對應的引用節點,找到這個節點以后,繼續尋找這個節點的引用節點,當所有的引用節點尋找完畢之后,剩余的節點則被認為是沒有被引用到的節點,即無用的節點

1621567453791_java垃圾回收機制.png


(4)結合項目中使用:

1)盡量不要創建很大的對象

原因 : GC回收算法從來不對大對象(>=85000字節)堆進行內存壓縮整理,在堆中大的內存塊會浪費太多CPU時間

2)不要頻繁的new生命周期很短的對象

這樣頻繁垃圾回收頻繁壓縮有可能會導致很多內存碎片






猜你喜歡:

Java進階之JVM垃圾回收機制視頻教程

Java垃圾回收機制[黑馬程序員]

JavaScript數據類型:javascript數據類型有哪些?

黑馬程序員Java培訓

分享到:
在線咨詢 我要報名
和我們在線交談!