JVM学习实用的参数

实用的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造成一定的性能损失。

你可能感兴趣的:(JVM)