JVM参数配置及详解
一、heap size
1、 -Xmx
指定jvm的最大堆大小,默认(MaxHeapFreeRatio参数可以调整)空余堆内存大于70%时,JVM就会减少堆直到-Xms的最小限制
2、 -Xms
指定jvm的初始堆大小
默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xms的最大限制, 高并发应用,建议和-Xmx一样,防止因为内存收缩或突然增大带来的性能影响
3、-Xmn
指定jvm的最小堆大小
此处的大小是(eden + 2 survivor space),与jmap -heap中显示的New gen是不同的
整个堆大小=年轻代大小 + 年老代大小,增大年轻代后,将会减小年老代大小,此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8
4、 -XX:NewSize
设置年轻代大小
5、 -XX:MaxNewSize
设置年轻代最大值
6、-XX:PermSize
设置jvm中Perm Generation的初始值
7、-XX:MaxPermSize
设置Perm Generation的最大值
8、-Xss
指定线程栈大小
一般小的应用,如果栈不是很深,应该是128k够用的,大的应用建议使用256k,这个参数对性能的影响比较大
9、-XX:NewRatio
年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)
-XX:NewRatio=4表示年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5
10、-XX:SurvivorRatio
指定New Generation中Eden Space与一个Survivor Space的heap size比例,-XX :SurvivorRatio=8,那么在总共New Generation为10m的情况下,Eden Space为8m
11、-XX:MinHeapFreeRatio=<n>
指定jvm heap在使用率小于n的情况下,heap进行收缩,Xmx==Xms的情况下无效,如-XX:MinHeapFreeRatio=30
12、 -XX:MaxHeapFreeRatio=<n>
指定jvm heap在使用率大于n的情况下,heap进行扩张,Xmx==Xms的情况下无效,如-XX:MaxHeapFreeRatio=70
13、 -XX:LargePageSizeInBytes
指定java heap分页页面大小,如:-XX:LargePageSizeInBytes=128m,
内存页的大小不可设置过大,会影响Perm的大小
14、-XX:+DisableExplicit GC
含义是关闭 System.gc(),这个函数需要严格的测试
15、-XX:MaxTenuringThreshold
垃圾最大年龄,指定一个object在经历了n次young gc后转移到old generation区,默认值是15
16、-XX:+UseBiasedLocking
锁机制的性能改善
17、-Xnoclassgc
禁用垃圾回收
18、-XX:PretenuringSizeThreshold
对象超过多大是直接在老生代分配,单位字节,新生代采用Parallel Scavenge GC时无效,另一种直接在老生代分配的情况是大的数组对象,且数组中无外部引用对象
19、-XX:TLABWasteTargetPercent
TLAB在Eden区的百分比,默认值是1%
20、-XX:+CollectGenOFirst
FULLGC时是否先YGC,默认值是false
二、garbage collector
1、-XX:+UseParallelGC
FULL GC采用parallel collector,并行收集
2、 -XX:+UseParNewGC
设置年轻代为并行收集,指定在New Generation使用 parallel collector,是Use Parallel GC的gc的升级版本,有更好的性能或者优点,可以和CMS gc一起使用
3、-XX:ParallelGC Threads
并行收集器的线程数,指定parallel collection时启动的thread个数,默认是物理processor的个数
4、-XX:+UseParallelOldGC
年老代垃圾收集方式为并行收集,指定在Old Generation使用parallel collector
5、-XX:MaxGCPauseMillis
每次年轻代垃圾回收的最长时间(最大暂停时间),如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值
6、 -XX:+UseAdaptiveSizePolicy,自动选择年轻代区大小和相应的Survivor区比例
7、 -XX:GCTimeRatio
设置垃圾回收时间占程序运行时间的百分比
8、 -XX:+ScavengeBeforeFULLGC
FULLGC前调用YGC,默认值为true
三、CMS相关参数
1、-XX:+UseConcMarkSweepGC
使用CMS内存收集
2、 -XX:+AggressiveHeap
试图是使用大量的物理内存长时间大内存使用的优化,能检查计算资源,至少需要256MB内存,大量的CPU
3、 -XX:+CMSFullGCsBeforeCompaction
多少次后进行内存压缩,由于并发收集器不对内存空间进行压缩,整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低,此值设置运行多少次GC以后对内存空间进行压缩,整理
4、-XX:+CMSParallelRemarkEnabled
降低标记停顿
5、-XX:+UseCMSCompactAtFullCollection
FULLGC的时候,对年老代的压缩,CMS是不会移动内存的,这个非常容易产生碎片,导致内存不够用,因此内存压缩这个时候就会被启用,增加这个参数是个好习惯,可能会影响性能,但是可以消除碎片
6、-XX:+UseCMSInitiatingOccupancyOnly
使用手动定义初始化定义开始CMS收集
7、-XX:CMSInitiatingOccupancyFraction=70
使用CMS作为垃圾回收,使用70%后开始CMS收集
8、 -XX:CMSInitiatingPermOccupancyFraction
设置Perm Generation使用到达多少比率时触发,默认值92%
9、 -XX:+CMSIncrementalMode
设置为增量模式,用于单CPU情况
四、辅助信息
1、-XX:+PrintGCDetails
打印垃圾收集的情况
2、-XX:+PrintGCTimeStamps
打印垃圾收集的时间情况
3、-XX:+PrintGCApplicationStoppedTime
打印垃圾回收期间程序暂停的时间
4、 -XX:+PrintGCApplicationConcurrentTime
打印每次垃圾回收前,程序未中断的执行时间
5、 -XX:+PrintHeapAtGC
打印GC前后的详细堆栈信息
6、-Xloggc:filename
把相关日志信息记录到文件以便分析
7、 -XX:+PrintTLAB
查看TLAB空间的使用情况
8、 -XX:+PrintTenuringDistribution
查看每次minor GC后新的存活周期的阀值
9、 -XX:+PrintClassHistogram
garbage collects before printing the histogram
10、 -XX:+UseFastAccessorMethods
get,set方法转成本地代码