CMS和G1http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/G1GettingStarted/index.html?C
CMS和G1
http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/G1GettingStarted/index.html?Concurrent Mark Sweept CMS启用方式:-XX:+UseConcMarkSweepGC,表示年老代使用此机制收回基础算法:标记-清除回收过程:
1、初始标记(STW stop the world),扫描能够和“根对象”直接关系的对象,并作标记。时间快;
2、并发标记3、并发预清理,处理“并发标记”的对象(可能会有一些新的对象晋升到老年代),减少下一阶段(SWT)4、重新标记 扫描剩余对象。从“跟对象”开始向下追溯,并处理对象并联5、并发清理6、并发重置?
缺点: 由于采用Mark-Sweep,所以CMS不会整理、压缩堆空间。 需要更多的CPU资源 需要更大的空间,百分之68就开始行动了。?Garbage First (G1) 保留了CMS关于代的概念,但是不是物理上连续区域,而是一个逻辑的概念。在Remark队段新算法的运用,以及收集过程中的整理压缩,弥补了CMS的不足。“G1 is planned as the long term replacement for the Concurrent Mark-Sweep Collector (CMS)”?
?---------------------官方介绍1、对于cms收集器的堆结构将堆分成三个部分:
?Eden:“伊佃园” survivors:幸存区 Old Generation:年老代、老年代上半部分为“年轻代”,下半部分称之为“年老代”或“老年代”。“年轻代”又分为Eden和两块survivors区域;“年老代”是一块连续的区域。对象的收集发生在上面这整个区域。2、CMS的“年轻代”GC“年轻”代是鲜绿色的“年老代”是蓝色的。下图就像你的应用程序运行了一会后的效果。“对象”被扫描在“年老代”的区域。
??在CMS中,“年老代”对象被释放时,它们不会移动位置。这个区域也不会被压缩,除非在一次full GC中。3、"年轻代"收集存活的对象被从Eden复制到survivor再到另一块survivor.一个老对象达到了寿命就会进入“老年代”
?4、后“年轻代”“年轻代”被清除后,Eden和另一块survivor区域被清空。
?5、CMS的“年老代”一共发生两次“停止世界”“初始标记“和”重新标记“,当”年老代“达到一定比例,就会拉开序幕。
?(1)初使标记是一个简短的过程(可到达被标记),(2)并发标记是当程序继续程序的时候发生活的对象,(3)再次标记是落标记的对象。6、”年老代“收集-并发收集对象没有在先前阶段标识将会被释放,但是不是被压缩。
?注意:未标记对象==死对象?7、”年老代“收集-收集之后被 第4步清扫之后,你可以看到大量的内存空闲了,你会注意这些没有被压缩。
?最终,CMS收集器通过5重新开始和等待下次开工。?-------------------------------------------------------------------------------1、G1堆结构堆是一块内存区域,这块区域被划分成固定大小的块。
?块的大小可以在JVM启动时选择,JVM的块的大小可达到2000,从1M到32M不等 ,由此可推算G1最大内存可管理60多G。2、G1堆的分配事实上,这些区域被划分成逻辑上的三块区域:Eden、Survivor、”年老代“区域。
??3、G1的”年轻代“?整个堆被划分成2000块,最小的为1M,最大的是32M,蓝色块存放着”年老代“对象,”绿色块存放着“年轻代”对象。
?、?注意这些块不一定非的是连续的空间。4、G1的一个“年轻代”活着的对象被疏散(复制或移动)到一个或多个survivor块上,如果这些对象达到一定寿命会被送进“年老代”。?这是一个(STW),Eden和survivor的大小会在下一次Young GC时被算出。根据这些信息会保持它的大小。可以根据需要变化大小。?5、G1的“年轻代”结束活着的对象被从survivor区域移到“年老代”上
??最近被变动的显示为深蓝色,survivor区域为绿色?总和来讲,G1的年轻代有如下特点:? 堆是单一的内存空间划分的区域? 年轻代的内存由一系列非连续的区域组成,这使得它很容易在需要的时候扩展;?年轻代的收集会停止世界,所以的应用程序线程都会停止;年轻的GC是并行进行的;存活的对象被复制到survivor或年老代上。?G1 的老年代?6、初始标记?
??7、并发标记
??8、重新标记?
?9、复制/清除
??10、复制、清除 之后选定的区域已收集和压缩成深蓝色的区域和暗绿色的区域在图中所示?
??G1年老代的特点:
Concurrent Marking PhaseLiveness information is calculated concurrently while the application is running.This liveness information identifies which regions will be best to reclaim during an evacuation pause.There is no sweeping phase like in CMS.Remark PhaseUses the Snapshot-at-the-Beginning (SATB) algorithm which is much faster then what was used with CMS.Completely empty regions are reclaimed.Copying/Cleanup PhaseYoung generation and old generation are reclaimed at the same time.Old generation regions are selected based on their liveness.http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/G1GettingStarted/index.html?