Java虚拟机垃圾收集算法
1、標記-清除算法
標記-清除算法分為 “標記” 和 “清除” 兩個步驟:首先標記出所有需要回收的對象,然后在標記完成后統一回收所有被標記的對象,是垃圾收集算法中的最基礎的收集算法。
缺點:一、標記和清除兩個步驟效率都不高;二、清除后產生大量不連續的內存空間,空間碎片太多產生可能會導致以后在程序運行過程中需要分配較大的對象時,無法找到足夠的連續空間而不得不觸發一次垃圾收集動作。
?
2、復制算法
復制算法將可用的內存按照容量大小分為大小相等的兩塊,每次只使用其中的一塊,當這一塊使用完了之后,就將還存活的對象復制到另一塊內存上,然后再把已使用過的內存空間一次性清理掉。
優點:實現簡單,運行效率高;
缺點:可用內存縮小了一半,代價大;
現在商業虛擬機都采用這種收集算法來回收新生代,因為根據IBM公司的研究,新生代中的對象98%是 “朝生夕死” 的,所以不需要按照 1:1 的比例來劃分內存空間,而是將內存劃分為一塊較大的Eden空間和兩塊較小的Survivor空間,每次只使用Eden和其中一個Survivor,當回收時,將Eden和Survivor中還存活的對象一次性復制到另一個Survivor空間。HotSpot虛擬機默認 Eden與Survivor空間的比例是8:1。
?
3、標記-整理算法
復制算法在對象存活率較高時需要進行多次復制操作,效率將會變低。更是為了節省內存,根據老年代的特點,出現了 "標記-整理" 算法。
標記-整理算法分為 “標記” 和 “整理” 兩個步驟:首先標記出所有需要回收的對象,然后在標記完成之后讓存活的對象都要都向內存的一端移動,最后清理掉端邊界以外的內存。
?
4、分代收集算法
?根據各個年代的特點,不同的年代采用不同的收集算法。
在新生代,每次垃圾收集時發現有大量對象死去,只有少量的存活,那就選用復制算法,只需要付出少量存活對象的復制成本就可以完成收集。
在老年代,由于對象存活率高、沒有額外空間對它進行擔保,就必須使用 “標記-清理” 或者 “標記-整理” 算法來進行回收。
?
轉載于:https://www.cnblogs.com/super-jing/p/10790733.html
總結
以上是生活随笔為你收集整理的Java虚拟机垃圾收集算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 简单又实用的分享!SharePoint母
- 下一篇: 梦断代码阅读笔记03