JVM-垃圾收集算法

新生代:复制算法,IBM研究过,约98%对象是“朝生夕死”,所以不需要按照1:1来划分;HotSpot中默认是8:1:1,即每次新生代可用空间为90%,只有10%会被“浪费”,

当Survivor空间不够时,需要依赖老年代进行分配担保。

  

垃圾收集算法
  1.标记-清除算法(Mark-Sweep) 2.复制算法(Copying)  3.标记-整理算法(Mark-Compact)  4.分代收集算法(Generational Collection)
简介 最基础 为解决1的效率问题;  
实现方案  

将内存分为相等的2个部分,

当1块用完后,将存活对象复制到另1块上,

然后一次清理掉已用那块;

先标记,

再让所有存活的对象都向一端移动,

清除掉端边界以外的内存;

 

 新生代:对象存活率低,有老年代作为担保;

-->复制算法

老年代:对象存活率高,无额外空间担保;

-->标记-清除、标记-整理孙

优点    当对象存活率很低,约10%以内,效率高    
缺点

1.效率问题,标记和清除两个过程效率都不高;

2.空间问题,产生内存碎片,可能会影响大对象的分配,导致提前触发GC;

1.将内存缩小为原来的一半;

2.当对象存活率较高时,就要进行较多的复制操作,效率变低;

   
适用领域  

多用于新生代,

将Eden和From区存活对象移动到To区,

然后清除Eden和From区,

老年代作为担保;

   
原文地址:https://www.cnblogs.com/WangXiaoYu-/p/10613247.html