本文基于Oracle hotspot jvm
1.GC:查找不再使用的对象,以及释放这些对象所管理的内存
2.算法:分代收集
Young:主要是用来存放新生的对象。
Old:主要存放应用程序中生命周期长的内存对象。
Permanent:是指内存的永久保存区域,主要存放Class和Meta的信息,Class在被 Load的时候被放入PermGen
在新生代中,每次垃圾收集时都发现有大批对象死去,只有少量存活,那就选用复制算法,只需要付出少量存活对象的复制成本就可以完成收集。而老年代中因为对象存活率高、没有额外空间对它进行分配担保,就必须使用“标记-清理”或“标记-整理”算法来进行回收。
3.主流收集器:
Serial
Throughput(Parallel):Parallel新生代+ParallelOld老年代
CMS(Concurrent mark sweep ):ParaNew新生代 +CMS老年代
G1(GarbageFirst)
备注:
2.Throughput minor和fullgc时空停顿、
3.Cmsminor时空停顿 fullgc时仅在部分阶段存在 (初始标记,重新标记)
Serial :
串行收集器是最古老,最稳定以及效率高的收集器,可能会产生较长的停顿,只使用一个线程去回收。新生代、 老年代使用串行回收;新生代复制算法、老年代标记-压缩;垃圾收集的过程中会StopThe World(服务暂停)
参数控制:
-XX:+
UseSerialGC
串行收集器
Parallel:
Parallel Scavenge