GC
来源:互联网 发布:单片机型号怎么看 编辑:程序博客网 时间:2024/06/03 18:30
CMS算法
介绍
用于对年老代的回收,目标是尽量减少应用的暂停时间,减少full gc发生的几率,利用和应用程序线程并发的垃圾回收线程来标记清除年老代。适用于响应时间大于吞吐量优先应用
原理
初始标记(CMS-initial-mark) -> 并发标记(CMS-concurrent-mark) -> 重新标记(CMS-remark) -> 并发清除(CMS-concurrent-sweep) ->并发重设状态等待下次CMS的触发(CMS-concurrent-reset),在1、3阶段暂停应用,整个时间小于200毫秒为优。young generation的回收采用的仍然是并行复制收集器,这个跟Paralle gc算法是一致的
参数
-XX:+UseConcMarkSweepGC启用CMS-XX:+UseParallelGC:选择垃圾收集器为并行收集器。此配置仅对年轻代有效。可以同时并行多个垃圾收集线程,但此时用户线程必须停止。后台系统任务可以使用此 gc。-XX:+UseParNewGC:设置年轻代为多线程收集。可与CMS收集同时使用。在serial基础上实现的多线程收集器。-XX:ParallelCMSThreads=20 CMS线程回收数-XX:ParallelGCThreads= N 年轻代线程回收数,默认是(ncpus <= 8) ? ncpus : 3 + ((ncpus * 5) / 8)-XX:+UseCMSCompactAtFullCollection CMS是不会整理堆碎片的,为了防止堆碎片引起full gc,通过会开启CMS阶段进行合并碎片选项,开启这个选项一定程度上会影响性能,配置适当的CMSFullGCsBeforeCompaction来调整性能-XX:CMSFullGCsBeforeCompaction=1 每次full gc进行碎片的合并,以保证新生代的大对象能分配到老年代-XX:+CMSParallelRemarkEnabled开启并行remark,减少remark暂停时间-XX:+CMSScavengeBeforeRemark强制remark之前开始一次minor gc,减少remark的暂停时间-XX:+CMSPermGenSweepingEnabled -XX:+CMSClassUnloadingEnabled 避免P区引起的full gc-XX:CMSInitiatingOccupancyFraction=80年老代占比超过xx进行CMS收集,年老代增长较慢可调大该值,设置过高可能导致:Concurrent mode failed(由于CMS回收年老代的速度太慢,导致年老代在CMS完成前就被沾满,引发full gc)。计算公式:(Xmn-S0)/Old<=Old(1-F)-XX:MaxTenuringThreshold 年龄达到一定阈值被移入老年代
阅读全文
0 0
- gc()
- GC
- GC
- GC
- GC
- GC
- GC
- GC
- GC
- Gc
- GC
- GC
- GC
- GC
- GC
- GC
- GC
- gc
- 在表格内让checkbox垂直居中的方式
- LayoutParams理解和使用
- 软件开发中常用调试技巧的原理和实践
- spring事务管理的两种方式
- Codeforces799C
- GC
- 大数据、数据挖掘分析和深度学习
- 下载docker容器镜像
- 如何写一篇好的文章?
- laravel 队列queue
- 九月英语——The fox and the lion
- com.microsoft.sqlserver.jdbc.SQLServerException: 必须执行该语句才能获得结果
- Androidframework LocationManager笔记
- JavaScript中的对象和数组