GC常用参数
- -Xmn 年轻代大小
- -Xms 堆的最小值
- -Xmx 堆的最大值
通常最大和最小设置相同值 减少jvm弹性扩展或者收缩堆大小时候的资源消耗 - -Xss: 栈大小
- -XX: +UseTLAB:开启线程本地分配缓存,在TLAB启用的情况下(默认开启),JVM会为每一个线程分配一块TLAB区域,加速对象分配,这个线程独有缓存可以减少多线程在分配内存时时候的堆空间的竞争。
- -XX:+PrintTLAB:打印TLAB的使用情况
- -XX:TLABSize : 设置TLAB的大小,默认情况下这个空间不会太大
- -XX:+DisableExplictGC:无效化System.gc()
- -XX:+PrintGC : 打印GC
- -XX:+PrintGCDetails : 打印GC的详细信息
- -XX:+PrintHeapAtGC : GC打印堆栈情况
- -XX:+PrintGCTimeStamps : 打印发生GC时候的系统时间
- -XX:+PrintVMOptions:打印jvm的参数
- -XX:+PringFlagsFinal: 使用方法示例:java -XX:+PrintFlagsFinal -version | grep G1 这个就是查询所有包含GC的jvm的参数列表,可以认为是jvm的参数的字典
Parallel常用参数
- -XX:SurvivorRatio:年轻代的eden区和survivor区的比例,默认是8:1:1
- -XX:PreTenureSizeThreshold:大对象直接分配到老年代的对象大小
- -XX:MaxTenuringThreshold:GC中年轻代升级为老年代的年龄,默认是15
CMS常用参数
- -XX:+UseConcMarkSweepGC : 使用CMS收集器
- -XX:+ParallelCMSThreads : CMS使用的线程数,默认是cpu核数的一半
- -XX:CMSInitiatingOccupancyFraction:使用多少比例的老年代后开始CMS收集,默认是68%。如果频繁发生SerialOld卡顿,应该调小。
- -XX:CMSFullGCsBeforeCompaction:多少次CMS之后进行压缩,因为CMS使用的标记清除的算法,会产生碎片,开启这个参数后可以在一定数量的CMS收集后整理内存碎片
- -XX:+CMSClassUnLoadingEnabled: 回收已经加载的但是不使用的类,这里回收的是永久代,jdk1.8之前
- GCTimeRatio:设置GC时间占用程序运行时间的百分比
- -XX:MaxGCPauseMillis:停顿时间,GC会尝试达到这个时间,但是不保证一定能达到
G1常用参数
- -XX:UseG1GC 使用G1垃圾回收器
- -XX:MaxGCPauseMillis:建议值,G1会尝试调整Young区的块数来达到这个值
- -XX:+G1HeapRegionSize:设置G1的Region大小,该值设置大的时候,可以单位时间减少GC的次数,但是每次GC的时间会长
- G1NewSizePercent:新生代的最小比例,默认是5%
- G1MaxNewSizePercent:新生代的最大比例,默认是60%,G1会根据实际情况动态调整新生代的大小,以保证GC时间和次数上第一个平衡
- GCRationTime:GC的时间建议比例,G1会根据这个值调整堆空间
- ConGCThreads:线程数量
- InitiatingHeapOccupanyPercent:启动G1的堆空间占用比例,这个比例越小,GC发生越频繁,但是GC的时间更短