JVM垃圾回收算法解析算法
標記-清除算法markdown
該算法爲最基礎的算法。它分爲標記和清除兩個階段,首先標記出須要回收的對象,在標記結束後,統一回收。該算法存在兩個問題:一是效率問題,標記和清除過程效率都不過高,二是空間問題,在執行一次清除操做後,會存在好多不連續的內存碎片,從而形成資源的浪費。空間碎片太多將會致使,當在程序運行過程當中,須要分配較大對象的時候沒法找到足夠的連續內存將會致使下一次垃圾收集操做。
複製算法ide
該算法是在標記-清除算法的基礎上出現的,它主要是爲了提升效率,它將內存區域分爲兩個相等的塊,每次只使用其中的一塊,當一塊用完了,就將還存活着的對象移動到另一塊上,而後將已存在的對象所佔用的內存釋放掉,這樣只是把其中的一塊內存釋放掉,也不存在內存碎片的問題,但這種的算法的效率是創建在縮小內存爲原來的50%的前提上,它是用空間換空間來獲取的。
標記-整理算法.net
複製算法存在一個問題,當對象存活率較高時,它會頻繁的進行復制操做,這樣也會致使效率低下。標記-整理算法在前兩個算法的基礎上出現,它的標記過程和標記-清除算法過程是同樣,只是它沒有對可回收的對象進行回收,而是讓全部存活的對象向一測移動,而後清除掉邊界之外的內存。 code
分代收集算法對象
當前商業虛擬機的垃圾收集都採用分代收集算法,它是根據對象的生存週期將內存分爲幾部分,它通常分爲新生代和老生代,在新生代,若是發現新生代中發現有大批對象死亡,少許對象存活,則採用複製算法,只須要犧牲少許的複製成本就能夠完成本次垃圾收集,而老生代由於對象存活率,沒有多餘的空間爲其作擔保,通常會使用標記-清除算法或標記-整理算法進行處理。
做者:柯之夢
來源:CSDN
原文:https://blog.csdn.net/yin4302008/article/details/85997091
版權聲明:本文爲博主原創文章,轉載請附上博文連接!blog