JVM常用调优参数
2024-10-21 03:23:43
目录
JVM内存模型及常用参数
参数解释
-XX:SurvivorRatio
:新生代中Eden区与两个Survivor区的比值。注意Survivor区有两个。如:为3,表示Eden:Survivor=3:2,一个Survivor区占整个新生代的1/5-XX:TargetSurvivorRatio
:对象动态年龄判断:当前放对象的Survivor区域中一批对象的总大小大于这块Survivor区域内存大小的50%,那么此时大于等于这批对象年龄最大值的对象,就可以直接进入老年代了-XX:-HandlerPromotionFailure
:老年代空间分配担保机制:Minor GC后JVM会算一下老年代剩余的可用空间。如果可用空间小于年轻代中所有对象大小之和(包括垃圾对象)。则会看是否设置了-XX:-HandlerPromotionFailure
(1.8默认设置了)参数
垃圾收集器
Serial收集器(-XX:+UseSerialGC -XX:+UseSerialOldGC
)
- 新生代采用复制算法,老年代采用标记-整理算法
Parallel Scavenge收集器(-XX:+UseParallelGC -XX:+UseParallelOldGC
)
- Parallel收集器其实就是Serial收集器的多线程版本
- Parallel Scavenge收集器关注点是吞吐量(高效率的利用CPU)。CMS等垃圾收集器的关注点更多的是用户线程的停顿时间(提高用户体验)。所谓吞吐量就是CPU中用于运行用户代码的时间与CPU总消耗时间的比值
- 新生代采用复制算法,老年代采用标记-整理算法
ParNew收集器(-XX:+UseParNewGC
) + CMS收集器(-XX:+UseConcMarkSweepGC
)
- 垃圾收集线程与用户线程(基本上)同时工作
- 新生代采用复制算法,老年代采用标记-清除算法
- ParNew:
- ParNew收集器其实跟Parallel收集器很类似,区别主要在于它可以和CMS收集器配合使用
- CMS:
- 优点:
- 并发收集、低停顿
- 缺点:
- 对CPU资源敏感(会和服务抢资源);
- 无法处理浮动垃圾(在并发标记和并发清理阶段又产生垃圾,这种浮动垃圾只能等到下一次gc再清理了);
- 它使用的回收算法-“标记-清除”算法会导致收集结束时会有大量空间碎片产生,当然通过参数-XX:+UseCMSCompactAtFullCollection可以让jvm在执行完标记清除后再做整理
执行过程中的不确定性,会存在上一次垃圾回收还没执行完,然后垃圾回收又被触发的情况,特别是在并发标记和并发清理阶段会出现,一边回收,系统一边运行,也许没回收完就再次触发full gc,也就是"concurrent mode failure",此时会进入stop the world,用serial old垃圾收集器来回收
- 优点:
垃圾回收统计信息
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:filename
CMS的相关核心参数
-XX:+UseConcMarkSweepGC
:启用cms-XX:ConcGCThreads
:并发的GC线程数-XX:+UseCMSCompactAtFullCollection
:FullGC之后做压缩整理(减少碎片)-XX:CMSFullGCsBeforeCompaction
:多少次FullGC之后压缩一次,默认是0,代表每次FullGC后都会压缩一次-XX:CMSInitiatingOccupancyFraction
:当老年代使用达到该比例时会触发FullGC(默认是92,这是百分比)-XX:+UseCMSInitiatingOccupancyOnly
:只使用设定的回收阈值(-XX:CMSInitiatingOccupancyFraction设定的值),如果不指定,JVM仅在第一次使用设定值,后续则会自动调整-XX:+CMSScavengeBeforeRemark
:在CMS GC前启动一次minor gc,降低CMS GC标记阶段(也会对年轻代一起做标记,如果在minor gc就干掉了很多对垃圾对象,标记阶段就会减少一些标记时间)时的开销,一般CMS的GC耗时 80%都在标记阶段-XX:+CMSParallellnitialMarkEnabled
:表示在初始标记的时候多线程执行,缩短STW-XX:+CMSParallelRemarkEnabled
:在重新标记的时候多线程执行,缩短STW
使用CMS后的JVM内存模型及常用参数:
最新文章
- Java JVM proxy setting
- ADS1.2安装教程
- 多表头固定demo--html Table
- 优雅绝妙的Javascript跨域问题解决方案
- 转:使用Android API最佳实践
- 对于vijos11.2模拟赛
- Set笔记
- android scrollview嵌套listview计算高度的问题
- Git错误merge怎么办?
- @ResponseBody注解
- IE 浏览器旧版本下载
- 处理AsyncTask的内存泄漏问题
- HTML表单与输入实例
- poj2559 Largest Rectangle in a Histogram(单调栈)
- shouldAutoRotate Method Not Called in iOS6
- CI框架 -- 在视图文件中使用 PHP 替代语法
- 手把手教你开发BLE数据透传应用程序
- jquery选择器之属性过滤选择器详解
- ThreadLocal和ThreadLocalMap源码分析
- ios 自定义NavgationBar的按钮
热门文章
- 国产电脑可较为流畅运行的Windows系统
- WPF开发经验-实现自带触控键盘的TextBox
- 关于docker创建容器报错-docker: Error response from daemon: runtime ";io.containerd.runc.v2"; binary not installed
- 修改端口号还是无法启动第二个tomcat的原因
- Linux Block模块之deadline调度算法代码解析
- C语言------程设设计入门
- day50-正则表达式01
- LcdToos设置“自动播放”和“上电自动开机”的作用
- k8s挂在问题
- MongoDB - 简单了解