实用的JVM参数
1.JIT编译参数
说明:JVM的JIT(Just-In-Time)编译器,可以在运行时将字节码编译成本地代码,从而提高函数的执行效率。
使用:-XX:CompileThreshold 当函数的调用次数超过时,JIT就将字节码编译成本地机器码。在client模式下,取值是1500;在server模式下,取值是10000。
-XX:+CITime 打印出JIT编译的耗时。
-XX:+PrintCompilation 打印出JIT编译的信息。
2.堆快照(堆Dump)
说明:在性能问题排查中,分析堆快照是必不可少的一环。
使用:-XX:+HeapDumpOnOutOfMemoryError 在程序发生OOM时,导出应用程序的当前堆快照。
-XX:HeapDumpPath 指定堆快照保存位置。
3.错误处理
-XX:OnOutOfMemoryError=c:\reset.bat 当OOM发生时,虚拟机运行一段第三方脚本。
4.获取GC信息
-verbose:gc
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps 输出GC的发生时间。
-XX:+PrintTenuringDistribution 查看新生对象晋升老年代的实际阈值。
-XX:MaxTenuringThreshold=18
-XX:+PrintHeapAtGC 在GC时打印详细的堆信息。
-XX:+PrintGCApplicationStoppedTime 显示应用程序在GC发生时的停顿时间。
-XX:+PrintGCApplicationConcurrentTime 显示应用程序在GC停顿时间的执行时间。
-Xloggc:C:\gc.log 指定GC日志的输出位置。
5.类和对象跟踪
-XX:+TraceClassUnloading 用于跟踪类卸载情况。
-XX:+TraceClassLoading 用于跟踪类加载情况。
-XX:+TraceClassResolution
-verbose:class 相当于同时打开-XX:+TraceClassLoading和-XX:+TraceClassUnloading
-XX:+PrintClassHistogram 用于打印运行时实例的信息。
6.控制GC
-XX:+DisableExplicitGC 禁止程序中使用System.gc()触发的Full GC。
-Xnoclassgc 禁止GC过程中类的回收。
-Xincgc 增量式的GC。增量式的GC使用特定的算法让GC线程和应用程序线程交叉执行,从而减小应用程序因GC而产生的停顿时间。
7.选择类校验器
-XX:-UseSplitVerifier 使用旧的类校验器。
-XX:-FailOverToOldVerifier 关闭再次校验。如果新的校验器校验失败,可以使用老的校验器再次校验。
-Xverify:none 禁用类校验。
8.Solaris下线程控制
-XX:+UseBoundThreads 绑定所有用户线程到内核线程,减少线程进入饥饿状态的次数。
-XX:+UseLWPSynchronization 使用内核线程替换线程同步。
-XX:+UseVMInterruptibleIO 允许允许时中断线程。
9.使用大页
-XX:+UseLargePages 启用大页。
-XX:LargePageSizeInBytes 指定大页的大小。
10.压缩指针
-XX:+UseCompressedOops 对Class的属性指针(静态成员变量)、对象的属性指针、普通对象数组的每个元素指针进行压缩。虽然压缩指针可以节省内存,但是压缩和解压指针也会对JVM造成一定的性能损失。