1. 程式人生 > >JVM垃圾回收算法解析

JVM垃圾回收算法解析

轉載 pre 過程 回收 sdn net 邊界 大對象 高效率

JVM垃圾回收算法解析

標記-清除算法

 該算法為最基礎的算法。它分為標記和清除兩個階段,首先標記出需要回收的對象,在標記結束後,統一回收。該算法存在兩個問題:一是效率問題,標記和清除過程效率都不太高,二是空間問題,在執行一次清除操作後,會存在好多不連續的內存碎片,從而造成資源的浪費。空間碎片太多將會導致,當在程序運行過程中,需要分配較大對象的時候無法找到足夠的連續內存將會導致下一次垃圾收集操作。

復制算法

該算法是在標記-清除算法的基礎上出現的,它主要是為了提高效率,它將內存區域分為兩個相等的塊,每次只使用其中的一塊,當一塊用完了,就將還存活著的對象移動到另外一塊上,然後將已存在的對象所占用的內存釋放掉,這樣只是把其中的一塊內存釋放掉,也不存在內存碎片的問題,但這種的算法的效率是建立在縮小內存為原來的50%的前提上,它是用空間換空間來獲取的。

標記-整理算法

復制算法存在一個問題,當對象存活率較高時,它會頻繁的進行復制操作,這樣也會導致效率低下。標記-整理算法在前兩個算法的基礎上出現,它的標記過程和標記-清除算法過程是一樣,只是它沒有對可回收的對象進行回收,而是讓所有存活的對象向一測移動,然後清除掉邊界以外的內存。

分代收集算法

當前商業虛擬機的垃圾收集都采用分代收集算法,它是根據對象的生存周期將內存分為幾部分,它一般分為新生代和老生代,在新生代,如果發現新生代中發現有大批對象死亡,少量對象存活,則采用復制算法,只需要犧牲少量的復制成本就可以完成本次垃圾收集,而老生代因為對象存活率,沒有多余的空間為其做擔保,一般會使用標記-清除算法或標記-整理算法進行處理。

作者:柯之夢
來源:CSDN
原文:https://blog.csdn.net/yin4302008/article/details/85997091
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

JVM垃圾回收算法解析