JVM垃圾回收演算法解析
阿新 • • 發佈:2019-01-08
JVM垃圾回收演算法解析
標記-清除演算法
該演算法為最基礎的演算法。它分為標記和清除兩個階段,首先標記出需要回收的物件,在標記結束後,統一回收。該演算法存在兩個問題:一是效率問題,標記和清除過程效率都不太高,二是空間問題,在執行一次清除操作後,會存在好多不連續的記憶體碎片,從而造成資源的浪費。空間碎片太多將會導致,當在程式執行過程中,需要分配較大物件的時候無法找到足夠的連續記憶體將會導致下一次垃圾收集操作。
複製演算法
該演算法是在標記-清除演算法的基礎上出現的,它主要是為了提高效率,它將記憶體區域分為兩個相等的塊,每次只使用其中的一塊,當一塊用完了,就將還存活著的物件移動到另外一塊上,然後將已存在的物件所佔用的記憶體釋放掉,這樣只是把其中的一塊記憶體釋放掉,也不存在記憶體碎片的問題,但這種的演算法的效率是建立在縮小記憶體為原來的50%的前提上,它是用空間換空間來獲取的。
標記-整理演算法
複製演算法存在一個問題,當物件存活率較高時,它會頻繁的進行復制操作,這樣也會導致效率低下。標記-整理演算法在前兩個演算法的基礎上出現,它的標記過程和標記-清除演算法過程是一樣,只是它沒有對可回收的物件進行回收,而是讓所有存活的物件向一測移動,然後清除掉邊界以外的記憶體。
分代收集演算法
當前商業虛擬機器的垃圾收集都採用分代收集演算法,它是根據物件的生存週期將記憶體分為幾部分,它一般分為新生代和老生代,在新生代,如果發現新生代中發現有大批物件死亡,少量物件存活,則採用複製演算法,只需要犧牲少量的複製成本就可以完成本次垃圾收集,而老生代因為物件存活率,沒有多餘的空間為其做擔保,一般會使用標記-清除演算法或標記-整理演算法進行處理。
作者:柯之夢
來源:CSDN
原文:https://blog.csdn.net/yin4302008/article/details/85997091
版權宣告:本文為博主原創文章,轉載請附上博文連結!