Java虛擬機器學習 垃圾收集演算法

2021-07-24 17:16:25 字數 723 閱讀 7594

跟蹤收集器採用的是集中式的管理方式,全域性記錄物件直接的引用狀態,執行時從一些gc roots的物件做為起點,從這些節點向下開始進行搜尋所有引用鏈,當乙個物件到gc roots 沒有任何引用鏈時,則證明此物件是不可用的。

可以作為 gc roots 的物件包括

主要有標記清除複製標記-整理三種實現演算法。

標記 - 清除演算法

標記演算法是最基礎的收集演算法,其他手機演算法都是基於這種思想。標記-清除演算法分為「標記」 和「清除」兩個階段,首先是標記出需要**的物件,標記完成後統一清除物件。

缺點:複製演算法

複製演算法是將可用記憶體容量劃分為大小相等的兩塊,每次只使用其中一塊,當第一塊使用完之後,將還存活在第一塊上的物件複製到第二塊上,把第一塊使用的記憶體空間一次清除,等待第二塊記憶體空間使用完後,可迴圈使用。每次只對其中一塊記憶體進行記憶體**,不會產生碎片,只要移動堆指標,按順序分配記憶體即可,實現簡單,執行高效。

缺點:

標記 - 整理演算法

標記 - 整理演算法與「標記 - 清楚」演算法一致,後續操作不只是直接處理物件,而是在清理無用物件完成後讓所有存活的物件都向一端移動,並更新引用其物件的指標,不會產生記憶體碎片。

缺點:

Java虛擬機器學習 垃圾收集演算法

跟蹤收集器採用的為集中式的管理方式,全域性記錄物件之間的引用狀態,執行時從一些列gc roots的物件做為起點,從這些節點向下開始進行搜尋所有的引用鏈,當乙個物件到gc roots 沒有任何引用鏈時,則證明此物件是不可用的。下圖中,物件object6 object7 object8雖然互相引用,但他...

Java虛擬機器學習 垃圾收集演算法

跟蹤收集器採用的為集中式的管理方式,全域性記錄物件之間的引用狀態,執行時從一些列gc roots的物件做為起點,從這些節點向下開始進行搜尋所有的引用鏈,當乙個物件到gc roots 沒有任何引用鏈時,則證明此物件是不可用的。下圖中,物件object6 object7 object8雖然互相引用,但他...

java虛擬機器 垃圾收集演算法

標記 就是標記無用的物件.正如名字一樣,先標記再清除 但是有不足 1.效率不行,標記和清除都慢2.清除之後有太多的記憶體碎片 如下圖 將記憶體 就是指堆 分為兩半,每次只用一半,當這一半滿了,就把還存活的物件複製到另外一半去,在清除已使用的那半,記憶體.但是相當於記憶體小了一半,不爽,得改 經研究發...