java启动时JVM参数分析

java启动命令
  • 执行类:java [-options] class [args…]
  • 执行jar文件:java [-options] -jar jarfile [args…]

[-options] 配置 Java 系统参数
[args…] 配置 Java 运行参数 即main方法中的参数数组args,可以通过修改启动配置进行设置,多个参数之间用空格分隔,如果参数自身带有空格,则需要用引号包裹。

java启动参数共分为三类
  1. 其一是标准参数(-),顾名思义,标准参数中包括功能以及输出的结果都是很稳定的,基本上不会随着JVM版本的变化而变化。我们可以通过 -help 命令来检索出所有标准参数。所有的JVM实现都必须实现这些参数的功能,而且向后兼容;该参数在程序中任何位置都可以访问到,优先级最高。覆盖程序中同名配置;预定义的标准参数(非-D开头的选项)的个数是有限的。但是我们还可以自定义设置系统属性,系统参数的标准格式为:-Dargname=argvalue,多个参数之间用空格隔开,如果参数值中间有空格,则用引号括起来。其中,参数名可以是 Java 默认的,此类参数由 JVM 虚拟机自动识别并生效,例如,-Dfile.encoding=UTF-8 用于指定文件编码格式;也可以是用户自定义的,例如,-Dmy=user,程序中可以读取该参数值,执行相关逻辑。虚拟机系统参数中设置的参数键值对(只有-D定义的系统属性是键值对形式),在程序中可以用System.getProperty("propertyName")获取对应参数值。

  2. 其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;

  3. 其三是非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 设置JVM初始java堆内存为512m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。 -Xms512m
-Xmx 设置JVM最大可用java堆内存为512M -Xmx512m
-Xmn 设置年轻代大小为200M。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8 -Xmn200m
-Xss 设置每个 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.log 保存错误日志或者数据到文件中 调试参数
-XX:-ExtendedDTraceProbes 开启solaris特有的dtrace探针 调试参数
-XX:HeapDumpPath=./java_pid.hprof 指定导出堆信息时的路径或文件名 调试参数
-XX:-HeapDumpOnOutOfMemoryError 当首次遭遇OOM时导出此时堆中相关信息 调试参数
-XX:OnError=";" 出现致命ERROR之后运行自定义命令 调试参数
-XX:OnOutOfMemoryError=";" 当首次遭遇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 跟踪类加载器约束的相关信息 调试参数

你可能感兴趣的:(java启动时JVM参数分析)