java启动命令
- 执行类:
java [-options] class [args…]
- 执行jar文件:
java [-options] -jar jarfile [args…]
[-options] 配置 Java 系统参数
[args…] 配置 Java 运行参数 即main方法中的参数数组args,可以通过修改启动配置进行设置,多个参数之间用空格分隔,如果参数自身带有空格,则需要用引号包裹。
java启动参数共分为三类
其一是标准参数(-),顾名思义,标准参数中包括功能以及输出的结果都是很稳定的,基本上不会随着JVM版本的变化而变化。我们可以通过
-help
命令来检索出所有标准参数。所有的JVM实现都必须实现这些参数的功能,而且向后兼容;该参数在程序中任何位置都可以访问到,优先级最高。覆盖程序中同名配置;预定义的标准参数(非-D开头的选项)的个数是有限的。但是我们还可以自定义设置系统属性,系统参数的标准格式为:-Dargname=argvalue
,多个参数之间用空格隔开,如果参数值中间有空格,则用引号括起来。其中,参数名可以是 Java 默认的,此类参数由 JVM 虚拟机自动识别并生效,例如,-Dfile.encoding=UTF-8 用于指定文件编码格式;也可以是用户自定义的,例如,-Dmy=user
,程序中可以读取该参数值,执行相关逻辑。虚拟机系统参数中设置的参数键值对(只有-D定义的系统属性是键值对形式),在程序中可以用System.getProperty("propertyName")
获取对应参数值。其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;
其三是非Stable参数(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;
提示:2、3为非标准系统参数形式,一般与 JVM 虚拟机设置有关,参数名和值都由 JVM 规范规定。例如:
-Xms
:初始堆大小、-Xmx
:最大堆大小。主要用于JVM调优和debug。
该参数的书写形式又分为两大类:
①、Boolean类型
格式:-XX:[±] 表示启用或者禁用name属性。例子:-XX:+UseG1GC(表示启用G1垃圾收集器)
②、Key-Value类型
格式:-XX:= 表示name的属性值为value。例子:-XX:MaxGCPauseMillis=500(表示设置GC的最大停顿时间是500ms)
JVM调优参数
参数及其默认值 | 描述 | 用例/所属 |
---|---|---|
-verbose:[class|gc|jni] |
-verbose:class 输出jvm载入类的相关信息,当jvm报告说找不到类或者类冲突时可此进行诊断。-verbose:gc 输出每次GC的相关情况。-verbose:jni 输出native方法调用的相关情况,一般用于诊断jni调用错误信息。 |
|
-Xms<size> | 设置JVM初始java堆内存为512m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。 | -Xms512m |
-Xmx<size> | 设置JVM最大可用java堆内存为512M | -Xmx512m |
-Xmn<size> | 设置年轻代大小为200M。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。 | -Xmn200m |
-Xss<size> | 设置每个 Java 线程堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。 | -Xss128k |
-Xloggc:file | 与-verbose:gc功能类似,只是将每次GC事件的相关情况记录到一个文件中,文件的位置最好在本地,以避免网络的潜在问题。若与verbose命令同时出现在命令行中,则以-Xloggc为准。 | |
-Xprof | 跟踪正运行的程序,并将跟踪数据在标准输出输出;适合于开发环境调试。 | |
-XX:-DisableExplicitGC | 禁止调用System.gc();但jvm的gc仍然有效 | 行为参数 |
-XX:+MaxFDLimit | 最大化文件描述符的数量限制 | 行为参数 |
-XX:+ScavengeBeforeFullGC | 新生代GC优先于Full GC执行 | 行为参数 |
-XX:+UseGCOverheadLimit | 在抛出OOM之前限制jvm耗费在GC上的时间比例 | 行为参数 |
-XX:-UseConcMarkSweepGC | 对老生代采用并发标记交换算法进行GC。jvm中GC执行的一种方式,并发(ConcMarkSweepGC)是指多个线程并发执行GC,一般适用于多处理器系统中,可以提高GC的效率,但算法复杂,系统消耗较大; | 行为参数 |
-XX:-UseParallelGC | 启用并行GC。jvm中GC执行的一种方式,并行(ParallelGC)是指GC运行时,对应用程序运行没有影响,GC和app两者的线程在并发执行,这样可以最大限度不影响app的运行; | 行为参数 |
-XX:-UseParallelOldGC | 对Full GC启用并行,当-XX:-UseParallelGC启用时该项自动启用 | 行为参数 |
-XX:-UseSerialGC | 启用串行GC。jvm中GC执行的一种方式,串行(SerialGC)是jvm的默认GC方式,一般适用于小型应用和单处理器,算法比较简单,GC效率也较高,但可能会给应用带来停顿; | 行为参数 |
-XX:+UseThreadPriorities | 启用本地线程优先级 | 行为参数 |
-XX:LargePageSizeInBytes=4m | 设置用于Java堆的大页面尺寸 | 性能调优 |
-XX:MaxHeapFreeRatio=70 | GC后java堆中空闲量占的最大比例 | 性能调优 |
-XX:MaxNewSize=size | 新生成对象能占用内存的最大值 | 性能调优 |
-XX:MaxPermSize=64m | 老生代对象能占用内存的最大值 | 性能调优 |
-XX:MinHeapFreeRatio=40 | GC后java堆中空闲量占的最小比例 | 性能调优 |
-XX:NewRatio=2 | 新生代内存容量与老生代内存容量的比例 | 性能调优 |
-XX:NewSize=2.125m | 新生代对象生成时占用内存的默认值 | 性能调优 |
-XX:ReservedCodeCacheSize=32m | 保留代码占用的内存容量 | 性能调优 |
-XX:ThreadStackSize=512 | 设置线程栈大小,若为0则使用系统默认值 | 性能调优 |
-XX:+UseLargePages | 使用大页面内存 | |
-XX:-CITime | 打印消耗在JIT编译的时间 | 调试参数 |
-XX:ErrorFile=./hs_err_pid<pid>.log | 保存错误日志或者数据到文件中 | 调试参数 |
-XX:-ExtendedDTraceProbes | 开启solaris特有的dtrace探针 | 调试参数 |
-XX:HeapDumpPath=./java_pid<pid>.hprof | 指定导出堆信息时的路径或文件名 | 调试参数 |
-XX:-HeapDumpOnOutOfMemoryError | 当首次遭遇OOM时导出此时堆中相关信息 | 调试参数 |
-XX:OnError="<cmd args>;<cmd args>" | 出现致命ERROR之后运行自定义命令 | 调试参数 |
-XX:OnOutOfMemoryError="<cmd args>;<cmd args>" | 当首次遭遇OOM时执行自定义命令 | 调试参数 |
-XX:-PrintClassHistogram | 遇到Ctrl-Break后打印类实例的柱状信息,与jmap -histo功能相同 | 调试参数 |
-XX:-PrintConcurrentLocks | 遇到Ctrl-Break后打印并发锁的相关信息,与jstack -l功能相同 | 调试参数 |
-XX:-PrintCommandLineFlags | 打印在命令行中出现过的标记 | 调试参数 |
-XX:-PrintCompilation | 当一个方法被编译时打印相关信息 | 调试参数 |
-XX:-PrintGC | 每次GC时打印相关信息 | 调试参数 |
-XX:-PrintGC Details | 每次GC时打印详细信息 | 调试参数 |
-XX:-PrintGCTimeStamps | 打印每次GC的时间戳 | 调试参数 |
-XX:-TraceClassLoading | 跟踪类的加载信息 | 调试参数 |
-XX:-TraceClassLoadingPreorder | 跟踪被引用到的所有类的加载信息 | 调试参数 |
-XX:-TraceClassResolution | 跟踪常量池 | 调试参数 |
-XX:-TraceClassUnloading | 跟踪类的卸载信息 | 调试参数 |
-XX:-TraceLoaderConstraints | 跟踪类加载器约束的相关信息 | 调试参数 |