- -XX:RestrictContended 用户类想使用@Contended 注解
- -XX:ContendedPaddingWidth 设置@Contended 注解填充变量的宽度,默认128
- -XX:PreBlockSpinsh 设置自旋锁尝试获取锁的次数,默认10
- -ea 开启断言(默认不开启,可指定包名或类名:-ea:AssertDemo -ea:a.b... )
- -da关闭断言 (可与-ea共同使用)
- -Djava.util.logging.config.file=configFile (指定java.util.logging.Logger的配置文件)
- -Xlint(:可选项) 编译器检查代码
- -Xprof (运行一个虚拟机,跟踪那些代码中经常被调用的方法,跟踪结果发给System.out)
- -Xmx20m 设置JVM最大可用内存
- -Xms20m 设置JVM初始内存
- -XX:+PrintGCDetails 打印GC详情
- -XX:NewRatio=2 设置老年区与新生区的比例
- -XX:SurvivorRatio=4 设置伊甸园区跟幸存者区的比例(默认4:1:1)
- -XX:+UseAdaptiveSizePolicy 设置Parallel Scavenge收集器具有自适应调节策略(年轻代的大小、Eden和Survivor的比例、晋升老年代的对象年龄等参数会被自动调整,已达到堆大小、吞吐量和停顿时间之间的平衡点;在手动调优比较困难的场合,可以直接使用这种自适应的方式,仅指定虚拟机的最大堆、目标的吞吐量(GCTimeRatio)和停顿时间(MaxGCPauseMills),让虚拟机自己完成调优工作)
- -XX:MaxTenuringThreshold=16 设置幸存者区对象经过多少代后进入养老区
- -XX:+UseTLAB 设置是否开启TLAB(Thread Local Allocation Buffer)
- -XX:TLABWasteTargetPercent 设置TLAB占伊甸园区的比例(默认1%)
- -XX:+PrintFlagsInital 打印所有参数的默认初始值
- -XX:+PrintFlagsFinal 打印所有参数的实际值
- -XX:+PrintCommandLineFlags 查看哪些已经被用户或者JVM设置过的XX参数的名称和值
-XX:+HandlePromotionFailure=[true|false] 是否设置空间分配担保,JDK7之后失效(为true时当Minor GC之前老年代剩余连续空间大小大于历次新生代进入老年代的平均大小,则尝试Minor GC,否则直接触发Full GC)- -XX:+PrintEscapeAnalysis 查看逃逸分析的筛选结果
- -XX:+DoEscapeAnalysis 开启逃逸分析(JDK7之后默认开启,但是具体虚拟机是否实现逃逸分析技术是不一定的,比如HotSpot虚拟机就没有实现逃逸分析,因为该技术尚未成熟)
- -XX:+EliminateAllocations 开启标量替换(默认开启,HotSpot虚拟机有实现)
- -server 启动Server模式,64位默认开启(逃逸分析只有早Server模式下才能启用)
- -XX:MetaspaceSize=100m 设置元空间初始值大小(默认值根据操作系统会不一样,每次Full GC,JVM会根据释放的元空间大小判断是扩容还是缩容,建议初始值设置大一点,防止多次扩容)
- -XX:MaxMetaspaceSize=100m 设置元空间最大值大小(默认值-1,没有限制,即本地内存最大值)
- -XX:MaxDirectMemorySize 设置直接内存最大值,默认跟-Xmx一致
- -XX:CompileThreshold 设置编译阈值(方法调用次数超过该值会被JIT编译缓存)
- -XX:-UseCounterDecay 关闭热度衰减
- -XX:CounterHalfLifeTime 设置热度衰减周期
- -Xint: 完全采用解释器模式执行程序
- -Xcomp: 完全采用即时编译器模式执行程序.如果即时编译出现问题,解释器会介入执行
- -Xmixed: 采用解释器+即时编译器的混合模式共同执行程序
- -XX:StringTableSize: 设置字符创常量池的HashTable大小
- -XX:+PrintStringTableStatistics 打印StringTable详情
- -XX:+UseStringDeduplication 开启String去重,默认是不开启的,需要手动开启
- -XX:+PrintStringDeduplicationStatistics 打印详细的去重统计信息
- -XX:StringDeduplicationAgeThreshold= 达到这个年龄的String对象被认为是去重的候选对象
- -XX:+HeapDumpOnOutOfMemoryError 当发生OOM时生成dump文件
- -XX:+UseSerialGC: 启用Serial垃圾收集器,老年代自动使用SerialOld
- -XX:+UseParNewGC: 启用ParNew垃圾收集器
- -XX:ParallelGCThreads: 限制ParNew垃圾收集器线程数默认和CPU核数相同
-
-XX:+UseParallelGC: 手动指定年轻代使用Parallel并行收集器(JDK8默认)
-
-XX:+UseParallelOldGC: 手动指定老年代使用ParallelOld并行收集器(与UseParallelGC互相激活)
-
-XX:ParallelGCThreads: 设置年轻代并行收集器的线程数,一般与CPU核数相等,当大于8核时3+5/8*核数
-
-XX:MaxGCPauseMills: 设置垃圾收集器最大停顿时间(毫秒)(为了尽可能地把停顿时间控制在MaxGCPauseMills以内,收集器在工作时会调整Java堆大小或者其他一些参数)
(慎用,若暂停时间短了,吞吐量也就低了) -
-XX:GCTimeRatio: 垃圾收集时间占总时间的比例(=1/(N+1))。用于衡量吞吐量的大小(与MaxGCPauseMills有一定矛盾)
-
-XX:+UseConcMarkSweepGC: 手动指定使用CMS收集器执行内存回收任务(-XX:+UseParNewGC会对应打开)
-
-XX:CMSInitiatingOccupanyFraction: 设置堆内存使用率的阈值,一旦达到该阈值,便开始进行回收
-
-XX:+UseCMSCompactAtFullCollection: 指定在执行完Full GC后堆内存空间进行压缩
-
-XX:CMSFullGCsBeforeCompaction: 设置在执行多少次Full GC后对内存空间进行压缩
-
-XX:ParallelCMSThreads: 设置CMS的线程数量,默认(ParallelGCThreads+3)/4
-
-XX:+UseG1GC: 手动指定使用G1垃圾收集器
-
-XX:G1HeapRegionSize: 设置每个Region的大小.值是2的幂,范围是1MB~32MB,目标是根据最小的Java堆大小划分出2048个区域.默认是堆内存的1/2000
-
-XX:MaxGCPauseMillis: 设置期望达到的最大GC停顿时间指标(JVM会尽力实现,但不保证达到).默认值是200ms
-
-XX:ParallelGCThread: 设置STW时GC线程数的值.最多设置为8
-
-XX:ConcGCThreads: 设置并发标记的线程数.将n设置为并行垃圾回收线程数(ParallelGCThreads)的1/4左右
-
-XX:InitiatingHeapOccupancyPercent: 设置出发并发GC周期的Java堆占用率阈值.超过此值,就触发GC.默认值45
-
-XX:+PrintGC: 输出GC日志.类似:-verbose:gc
-
-XX:+PrintGCDetails: 输出GC详细日志
-
-XX:+PrintGCTimeStamps: 输出GC时间戳(以基准时间的形式)
-
-XX:+PrintGCDateStamps: 输出GC时间戳(以日期的形式,如2013-05-04T21:53:59.123+0800)
-
-XX:+PrintHeapAtGC: 在进行GC的前后打印出堆的信息
-
-Xloggc:../logs/gc.log: 日志文件的输出路径
-
-XX:+TraceClassLoading: 追踪类的加载信息,并打印出来
命令行
jsp 查看java进程ID
jstat -gc [pid] 查看Java堆
jinfo -flag newRatio [pid] 查看JVM参数NewRatio
调优工具
jprofiler
jvisualvm
MAT(显示GC Root比较方便) Eclipse Memory Analyzer Open Source Project | The Eclipse Foundation
GC日志分析工具
GCViewer, GCEasy, GCHisto, GCLogViewer, Hpjmeter, garbagecat等