实用JVM参数介绍
1. JIT编译参数
jit(just -in-time) ,可以在运行时将字节器编译成本地代码。从而提高代码的执行效率
-XX:CompileThreshold为编译的阀值。当程序的调用次数超过这个阀值时,JIT会将字节码编译成本地机器码。
在Client的模式下,默认值是1500
在server下,默认值是10000
在运行时,可以使用-XX:PrintCompilation来打印出JIT编译的信息哦
2. 堆快照
获得程序堆快照文件的方法
添加参数-XX:+HeapDumpOnOutOfMemoryError,让系统出现OutOfMemoryError时将当时JVM内所有heap dump出来
例:
在程序OOM时,把堆快照文件导出到d盘的test.prof文件中
导出以后,就可以直接使用JDK自带的visual vm查看分析,查看方法,看之前的博客
如何分析DUMP日志 http://blog.youkuaiyun.com/qinghua9/article/details/17166263
3. 错误处理
在系统发生错误时,虚拟机可以在错误发生时同时执行一段脚本,
例:
在程序OOM时执行jstack,导出当时的线程,以便查询问题
-XX:OnOutOfMemoryError =jstack %p > d:/threads.log
4. 获得GC信息
获得实时的GC信息,是最快的排除方法之一了
使用–verbose:gc 或者 -XX:PrintGC可以输出具体的GC信息
如果需要更详细的,则可以使用
-XX:PrintGCDetail 可以查看到分代GC的相关信息
如果想看到GC发生的时间,再改为
-XX:PrintGCTimeStamps,可以看到很详细的GC发生的时间了
另外如果你看想看更详细的,如年轻代对象晋升到老年代的年龄。
则可以使用-XX:PrintTenuringDistribution查看
6. 控制GC
-XX:+DisableExplicitGC 可以用于禁止显示的GC操作,如:如果在程序中使用System.gc时,full gc 会变成young gc.
可以防止开发人员,或者第三方框架使用显示GC时造成的性能下降
便 -XX:+DisableExplicitGC 与 NIO的direct memory 一起配合使用时得注意。
RednaxelaFX的文章介绍
http://hllvm.group.iteye.com/group/topic/27945%EF%BC%89%E3%80%82
7. 选择类校验器
JDK1.6中有两类校验器可以使用,可以使用参数-XX:-UseSplitVerifier来指定使用旧的校验器哦