您的位置:首页 > 其它

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

2017-11-04 09:05 495 查看
堆:
新生代+老年代;
新生代(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压力,需要注意:

软件设计架构

代码如何写

堆空间如何分配:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: