深入JVM内核—原理与优化之gc参数学习

来源:互联网 发布:linux的保存命令 编辑:程序博客网 时间:2024/06/05 10:19
堆:
新生代+老年代;
新生代(Eden+s0+s1);

串行回收器算法:
最古老、最稳定、效率高;
可能会有较长时间的停顿;
-XX:UserSerialGC
- 新生代、老年代使用串行回收;
-新生代复制算法;
-老年代标记-压缩;

并行收集器:
ParNew收集器
-XX:+UseParNewGC
新生代并行;
老年代串行;
- Serial收集器新生代的并行版本
- 复制算法
- 多线程,需要多和支持
- -XX:ParallelGCThreads 限制线程数量

Parallel收集器
类似ParNew;
新生代复制算法,老年代标记压缩算法;
更加关注吞吐量;
-XX:+UseParallelGC
使用Parallel收集器+老年代串行
-XX:+UserParallelOldGC
使用Parallel收集器+并行老年代
参数:
-XX:MaxGCPauseMills
最大停顿时间,单位秒;
-XX:GCTimeRatio
垃圾收集时间占比;
两个值是矛盾的;停顿时间和吞吐量之间的调优;

CMS收集器
并发 标记清除算法;
与标记-压缩相比;
并发阶段会降低吞吐量;(应用程序的线程资源会被GC线程占用掉一部分)
老年代收集器(新生代使用ParNew);
-XX:+UserConcMarkSweepGC
过程比较复杂,着重实现标记:
初始标记(STW):只标记根对象的可达对象,快
*并发标记(和用户线程一起);主要标记过程,标记全部对象;
重新标记(STW);工作量小,并发标记的补充;
并发清除(和用户线程一起);清除不压缩;
特点:
尽可能降低停顿
会影响系统整体的吞吐量和性能;
清理不彻底;
和用户线程一起执行,不能再空间快满时再清理;
concurrent mode failure; (使用串行)
-XX:+UseCMSCompactAtFullCollection, Full GC后进行一次整理;
-XX:+CMSFullGCsBeforeCompaction,几次GC后进行一次碎片整理
-XX:ParallelCMSThreads,设定CMS的线程数量

为减轻GC压力,需要注意:
软件设计架构
代码如何写
堆空间如何分配:
原创粉丝点击