java启动参数共分为三类:
其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;
其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;
其三是非Stable参数(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;
标准参数
-client
设置 JVM 使用 client 模式,特点是启动速度比较快,但运行时性能和内存管理效率不高,通常用于客户端应用程序或者PC应用开发和调试。
-server
设置 JVM 使 server 模式,特点是启动速度比较慢,但运行时性能和内存管理效率很高,适用于生产环境。在具有64位能力的 JDK 环境下将默认启用该模式,而忽略 -client 参数。
-classpath
用来告知 JVM 搜索目录名、jar 文档名、zip文档名,之间用分号分隔;使用 -classpath 后 JVM 将不再使用 CLASSPATH 中的类搜索路径,如果-classpath和 CLASSPATH 都没有设置,则 JVM 使用当前路径(.)作为类搜索路径。
JVM 搜索类的方式和顺序为:Bootstrap,Extension,User。
Bootstrap 中的路径是 JVM 自带的 jar 或 zip 文件,JVM 首先搜索这些包文件,用 System.getProperty(“sun.boot.class.path”) 可得到搜索路径。
Extension 是位于 JRE_HOME/lib/ext 目录下的 jar 文件,JVM 在搜索完 Bootstrap 后就搜索该目录下的 jar 文件,用 System.getProperty(“java.ext.dirs”) 可得到搜索路径。
User 搜索顺序为当前路径.、CLASSPATH、-classpath,JVM 最后搜索这些目录,用 System.getProperty(“java.class.path”) 可得到搜索路径。
-Dproperty=value
设置系统属性名/值对,运行在此 JVM 之上的应用程序可用 System.getProperty(“property”) 得到 value 的值。如果 value 中有空格,则需要用双引号将该值括起来,如-Dname="spacestring"。
该参数通常用于设置系统级全局变量值,如配置文件路径,以便该属性在程序中任何地方都可访问。
-jar
指定以 jar 包的形式执行一个应用程序。
要这样执行一个应用程序,必须让 jar 包的 manifest 文件中声明初始加载的 Main-class,当然那 Main-class 必须有 public static void main(String[]args) 方法。
非标准参数
-Xloggc:file
与-verbose:gc功能类似,只是将每次GC事件的相关情况记录到一个文件中,文件的位置最好在本地,以避免网络的潜在问题。
若与verbose命令同时出现在命令行中,则以-Xloggc为准。
-Xmsn
指定jvm堆的初始大小,默认为物理内存的1/64,最小为1M;可以指定单位,比如k、m,若不指定,则默认为字节。
-Xmxn
指定jvm堆的最大值,默认为物理内存的1/4或者1G,最小为2M;单位与-Xms一致。
非 Stable 参数
非 Stable 参数可以松散地分为以下三类:
行为参数(Behavioral Options):用于改变 JVM 的一些基础行为
性能调优(Performance Tuning):用于 JVM 的性能调优
调试参数(Debugging Options):一般用于打开跟踪、打印、输出等 JVM 参数,用于显示 JVM 更加详细的信息行为参数:
串行(SerialGC) 是 JVM 的默认GC方式,一般适用于小型应用和单处理器,算法比较简单,GC效率也较高,但可能会给应用带来停顿;
并行(ParallelGC)
是指GC运行时,对应用程序运行没有影响,GC和app两者的线程在并发执行,这样可以最大限度不影响app的运行;
并发(ConcMarkSweepGC) 是指多个线程并发执行GC,一般适用于多处理器系统中,可以提高GC的效率,但算法复杂,系统消耗较大;性能调优调试参数