JVM基础到实战04-垃圾回收算法

上一章讲了对象的存活分析,分析完对象是否存活后,我们就需要执行相应的垃圾回收过程,至于选择哪种垃圾回收算法呢,目前主要有以下三种垃圾回收算法:

1.标记清除算法

过程:标记--》清除

产生的问题:
1.标记和清除的过程效率都不高
2.空间问题,标记清除后会产生大量的不连续内存碎片,空间碎片越多会导致以后程序在
在分配较大的对象实,无法找到足够的连续内存二不得不提前出发一次垃圾收集动作。

2. 复制算法

过程:分为AB两块内存,将A中存活对象内存复制到B中,然后将A中的全部置为空

为什么出现?
现在的商业虚拟机都采用这种算法来回收新生代,主要是新生代中98%的对象都是朝生夕死的,
所以有大量的内存是需要回收的,我们只需要移动少部分内存。所以并不需要按1:1来分配
而是将内存分为较大的一块Eden和两块较小的Survivor空间,每次实用一块Eden和其中一块survivor,
survivor from 和survivor to。比例是8:1:1,
如果腾出的内存不够,会用担保分配算法(将对象分配至老年代)

缺点:复制算法在对象存活率较高时,需要复制较多的内存,更关键的是,如果不想浪费50%的
内存,就需要额外的空间进行分配担保,以因对被使用的内存中所有对象都是100%存活
的极端情况,所以,老年代不能使用复制算法

3.标记整理算法

过程:将所有存活的对象标记处来,全部整理到一端,剩下的部分内存全部置空

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章