垃圾回收算法
**
- 标记清除算法: 标记所有要回收对象,标记结束后统一回收。标记清除分别效率较低,造成大量碎片。
- 复制算法: 将空间一分为二,每次用其中一块内存,将不需要的回收的对象复制到另外一块内存上,回收时将原来的半块区域全部回收。比较适合年轻代
3.标记整理算法: 标记需要回收的对象,将不需回收的对象移向一端,然后清楚端界外的内存。比较适合老年代。
分代收集算法:
将堆分为年轻代和老年代,分别采用不同的算法。
年轻代采用类似复制的算法,年轻代将内存分为一个Eden,两个survivor。每次使用一个Eden,和一个survivor,回收时,将他们复制到另一块survivor,然后清理他们。当Eden,survivor中存活的对象超过survivor需要老年代担保。
老年代采用标记整理算法。
**
垃圾回收器
1.serial 单线程收集器,垃圾收集时必须暂停其他线程,直到结束。年轻代采用复制算法,老年代采用标记整理算法,简单高效,client下默认的算法,由于应用程序都比较小。
2 parNOW 年轻代收集器采用复制算法,serial的多线程版本,单线程与serial比并无优势,cpu多时优势较大。除了serial只有它可以与cms配合使用。
3.parallel scavenge 年轻代收集器采用复制算法,为了完成一个可控制的吞吐量的收集器。吞吐量和停顿不可能同时调优。因为GC时,垃圾回收总量不变,停顿时间减少,新生代内存减少,收集频率较快,吞吐量减少。
4. serial old serial的老年版本
5.CMS 目标:获得最短的停顿时间,适用互联网站或B/S系统的服务器。初始标记:GC root直接关联的对象 。并发标记:标记所有对象 。 重新标记:做修正并发清楚:清理对象。并发收集,地停顿。
6.G1 可以同时使用年轻代和老年代的收集器,采用标记整理算法。将堆分为多个region,追踪每个region的价值大小,优先收集价值大的region。整个过程包括
初始标记,并发标记,最终标记,筛选回收。初始标记和并发标记和CMS一样,最终标记主要记录变化的对象,筛选回收选取价值最大的region。