jvm参数说明
今天总结一下常用的JVM的启动参数。
参数类别
参数项
说明
标准参数(-,所有的JVM实现都必须实现这些参数的功能,而且向后兼容)
-client
以client模式启动jvm,这种方式启动速度快,但运行时性能和内存管理效率不高,适合客户端程序或者开发调试。
-server
以server模式启动jvm,与client情况恰好相反。适合生产环境。64位的jvm自动以server模式启动。
-classpath
-cp
告诉jvm类搜索路径。如果指定了-classpath,则jvm就忽略CLASSPATH中指定的路径。各路径之间以分号隔开。如果-classpath和CLASSPATH都没有指定,则jvm从当前路径寻找class。
Jvm搜索class的方式和顺序为:Bootstrap(jvm自带的)->Extension(JRE_HOME/lib/ext中的)->User(应用程序自己的)。如下语句会输出上述三种方式的路径信息:
System.getProperty("sun.boot.class.path");
System.getProperty("java.ext.dirs");
System.getProperty("java.class.path");
-Dproperty=value
设置系统属性名/值对。如果value中有空格,则需要使用双引号。
-jar
指定以jar包的形式启动应用程序
-javaagent:<jarpath>[=<options>]
指定jvm启动时装入java语言设备代理。关于设备代理是jdk1.5新推出的概念。进一步的信息可以参考java.lang.instrument.Instrumentation接口
-verbose[:class|gc|jni]
分别输出:
Jvm载入类的信息。诊断ClassNotFound错误时有用
Jvm每次gc的信息。
Native方法调用的情况,用于诊断jni调用。
非标准参数(-X?,默认JVM实现此功能,但是不保证所有JVM都实行,而且不保证向后兼容)
-Xbootclasspath:bootclasspath
让jvm从指定的路径中加载bootclass,用来替换jdk的rt.jar。一般不会用到。
-Xbootclasspath/a:path
被指定的文件追加到默认的bootstrap路径中。
-Xbootclasspath/p:path
让jvm优先于默认的bootstrap去加载path中指定的class
-Xincgc
开启增量gc,一般也不会用到。
-Xloggc:file
输出gc日志,在没有专业的监控工具时,这个显得很有用。
-Xmsn
指定jvm堆的初始大小。默认是物理内存的1/64
-Xmxn
指定jvm堆的最大值。默认是物理内存的1/4
-Xprof
跟踪正在运行的程序,并将跟踪数据输出到标准输出,适合开发调试。
-Xssn
设置单个线程栈的大小。
非稳定参数(-XX,此类参数各个JVM的实现会有不同,而且随时可能消失)
-XX:+ScavengeBeforeFullGC
新生代GC优先于Full?GC执行
-XX:+UseGCOverheadLimit
在抛出OOM之前,jvm消耗在gc上的时间比例。
-XX:-UseConcMarkSweepGC
采用并发标记交换算法进行GC。并发是指过个线程同时gc,适合多核处理器的情况,并发一定满足并行,反之不成立。
-XX:-UseParallelGC
启用并行GC。并行是指有独立的线程进行gc,gc时不会打断应用线程。
-XX:-UseSerialGC
启用串行GC。新版本jdk不会这么干了。
-XX:MaxNewSize=size
Java堆中新生成对象占用堆的大小
-XX:MaxPermSize=size
Java堆中年老代占用堆的最大值
-XX:HeadDumpPath=./java_pid<pid>.hprof
指定导出堆信息时的路径或者文件名。
-XX:-HeadDumpOnOutOfMemoryError
当首次出现OOM时导出此时堆中相关信息。
-XX:-PrintGC
每次GC时打印相关信息
-XX:-PrintGC?Details
每次GC时打印详细信息
-XX:-PrintGCTimeStamps
打印GC的时间戳
-XX:-TranceClassLoading
跟踪类的加载信息
-XX:-TraceClassLoadingPreorder
跟踪被引用到的所有类的加载信息
-XX:-TranceClassResolution
跟踪常量池
-XX:-TraceClassUnloading
跟踪类的卸载信息
?