JVM 常用参数
1.垃圾回收期参数选择
UseSerialGC 开启此参数使用serial&serial old搜集器(client模式默认值,JDK1.3引入)
-Xms 4m -Xmx 64m
UseParallelGC 吞吐量优先收集器,开启此参数使用parallel scavenge¶llel old搜集器(server模式默认值)吞吐量较高
-Xms 物理内存的1/64(上限1G)、-Xmx 物理内存的1/4(上限1G)
提供自适应堆调整功能UseParNewGC 开启此参数使用ParNew&serial old搜集器(不推荐,老版本的并行,年老代不并行,JDK1.4引入)
UseConcMarkSweepGC 并发低中断收集器,开启此参数使用ParNew & CMS(serial old为替补)搜集器(JDK1.4引入)
会有并发模式失败
会自动开启-XX:+UseParNewGC
尽量靠minor gc进行垃圾回收,压缩式垃圾回收很慢
如果年老代没有足够的空间处理新生代空间的对象晋升,只会在年老代触发一次stop-the-world的压缩式GC(与full GC有区别,full GC发生在新生代和年老代),调优主要是避免压缩式GC
从并行切换到并发,年老代的空间要增加0.2-0.3UseParallelOldGC:开启此参数在年老代使用parallel old搜集器(该参数在JDK1.5之后已无用)
-XX:+UseG1GC 打开G1收集器
-XX:MaxGCPauseMillis=50 一次GC的暂停时间尽量保持在50ms内
-XX:GCPauseIntervaMillis=200 两次GC的时间间隔在200ms以上
-XX:+PrintCompilation 打开编译日志
2.JVM内存参数
Xms java heap 初始值(默认物理内存的1/64)
Xmx java heap 最大值(默认物理内存的1/4)
Xmn 新生代大小
Xss 线程栈大小
PermSize 永久代初始值(默认物理内存的1/64)
MaxPermSize 永久代最大值(默认物理内存的1/4)
NewRatio 新生代与老年代的比列(3 新生代占1/4)
SurvivorRatio 新生代Eden区和survivor比列(默认为8), Eden占0.8
3.垃圾回收期通用性能参数
PretenureSizeThreshold 晋升年老代的对象大小, 默认为0
MaxTenuringThreshold 晋升为年老代的最大年龄(默认15经过15次普通gc进入年老代),
DisableExplicitGC 禁用system.gc
4.并行垃圾回收器性能参数parNew
-XX:ParallelGCThreads 回收时开启的线程数,默认与CPU个数相等
Parallel scavenge(优先满足最大停顿时间的目标,次之是吞吐量,最后才是新生代区域的最小值)
GCTimeRatio 设置系统的吞吐量。比如设为99,则GC时间比为1/1+99=1%,也就是要求吞吐量为99%。若无法满足会缩小新生代大小。
MaxGCPauseMillis:设置垃圾回收的最大停顿时间。若无法满足设置值,则会优先缩小新生代大小,仍无法满足的话则会牺牲吞吐量。
-XX:-UseAdaptiveSizePolicy 关闭自适应堆调整
-XX:ScavengeBeforeFullGC 在Full GC做一次MinorGC 5.并发垃圾回收期参数
增加新生代大小以降低MinorGC的频率;增加年老代的大小以降低CMS的频率和内存碎片化问题;调节Eden和Survivor区域优化对象老化;进一步优化CMS的启动条件。
-XX:ParallelGCThreads= 控制重新标记使用的线程数
-XX:CMSIncrementalMode 增量模式
-XX:CMSIncrementalPacing 配合增量模式, 根据应用程序的行为自动调整每次执行垃圾回收任务的幅度
-XX:CMSInitiatingOccupancyFraction 触发第一次GC的CMS收集器的年老代内存比例。比如60%的意思就是说,当内存达到60%,就会开始进行CMS并发收集。
-XX:UseCMSInitiatingOccupancyOnly 表示当年老代内存达到该比例时触发GC,不应把该值设置低于年老代的活跃比例
-XX:UseCMSCompactAtFullCollection:这个前面已经提过,用于在每一次CMS收集器清理垃圾后送一次内存整理。
-XX:CMSFullGCsBeforeCompaction:设置在几次CMS垃圾收集后,触发一次内存整理。
-XX:+CMSScavengeBeforeRemark 执行CMS重新标记之前进行MinorGC 6.打印GC日志
安全点:所有Java应用线程被阻塞,执行本地代码的线程被禁止返回JVM执行Java代码,此时所有的Java线程被显式阻塞并且不能修改Java堆
verbose:gc
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime 报告应用在安全点之间的运行时间、阻塞java线程的时间
-XX:+PrintSafepointStatistics 将垃圾回收的安全点与其他安全点分开
-Xloggc:
7.通用参数
-client/-server 决定加载那个JIT编译器
-d64 加载64位VM
-XX:UseCompressedOops 开启压缩指针特性(-Xmx不超过32GB才可以使用)
-Xms heap的初始大小
-Xmx Heap的最大阈值
在注重延时或者吞吐量时,一般将-Xms与-Xmx设为一样
新生代参数
-XX:NewSize 新生代初始化大小
-XX:MaxNewSize 新生代的最大阈值
-XX:NewRatio 新生代和年老代的比列(3表示1:3,新生代占1/4)
-Xmn 将新生代的最小和最大设为相同值(只有-Xms和-Xmx一样时才使用该参数)年老代的大小按照新生代的大小隐式设定
永久区参数
-XX:MaxPermSize
-XX:PermSizeSurvivor调优
-XX:MaxTenuringThreshold 设置最大晋升年老代阈值
-XX:PrintTenuringDistribution 监控对象年龄分布
-XX:InitialSurvivorRatio 与ParallelGC配合使用(size = -Xmn/(_ + 2))
-XX:SurvivorRatio 单块Survivor与Eden的比例
-XX:TargetSurvivorRatio MinorGC 后Survivor被占用的最大比例,默认0.5
观察到新的晋升阈值持续<最大晋升阈值,或者Survivor空间小于总的存活对象都表明Survivor空间过小其他参数
-XX:UnlockDiagnosticVMOptions -XX:PrintINterpreter查看内存生成的模板表(包含字节码对应的机器码)
-XX:UseBiasedLocking 允许线程使用偏向锁
-XX:ErrorFile 设置错误日志文件的路径名
-XX:+HeapDumpOnOutOfMemory 当出现内存溢出时生成堆的信息
-XX:HeapDump-Path= 指定堆快照的存放位置
-XX:PrintCommandLineFlags 打印JVM默认的优化值
-XX:PrintCompilation 监控JIT编译器
DisableExplicitGC 禁用system.gc
-XX:+PrintCompilation 有输出说明JIT编译器的工作还没结束
8.参数通用法则java heap 设置为年老代稳定(full GC 后)时的3-4倍
永久代的设置为永久代稳定时的1.2-1.5倍
新生代应该为年老代稳定时的1-1.5倍
年老代不低于活跃时的1.5倍
新生代不低于heap的0.1
- 点赞
- 收藏
- 关注作者
评论(0)