java启动参数共分为三类;java
其一是标准参数(-),全部的JVM实现都必须实现这些参数的功能,并且向后兼容;算法
其二是非标准参数(-X),默认jvm实现这些参数的功能,可是并不保证全部jvm实现都知足,且不保证向后兼容;并发
其三是非Stable参数(-XX),此类参数各个jvm实现会有所不一样,未来可能会随时取消,须要慎重使用;app
1、标准参数中比较有用的:jvm
2、非标准参数又称为扩展参数,通常用到最多的是性能
用-XX做为前缀的参数列表在jvm中多是不健壮的,SUN也不推荐使用,后续可能会在没有通知的状况下就直接取消了;可是因为这些参数中的确有不少是对咱们颇有用的,好比咱们常常会见到的-XX:PermSize、-XX:MaxPermSize等等;命令行
首先来介绍行为参数:线程
参数及其默认值描述调试
-XX:-DisableExplicitGC禁止调用System.gc();但jvm的gc仍然有效日志
-XX:+MaxFDLimit最大化文件描述符的数量限制
-XX:+ScavengeBeforeFullGC新生代GC优先于Full GC执行
-XX:+UseGCOverheadLimit在抛出OOM以前限制jvm耗费在GC上的时间比例
-XX:-UseConcMarkSweepGC对老生代采用并发标记交换算法进行GC
-XX:-UseParallelGC启用并行GC
-XX:-UseParallelOldGC对Full GC启用并行,当-XX:-UseParallelGC启用时该项自动启用
-XX:-UseSerialGC启用串行GC
-XX:+UseThreadPriorities启用本地线程优先级
串行(SerialGC)是jvm的默认GC方式,通常适用于小型应用和单处理器,算法比较简单,GC效率也较高,但可能会给应用带来停顿;
并行(ParallelGC)是指GC运行时,对应用程序运行没有影响,GC和app二者的线程在并发执行,这样能够最大限度不影响app的运行;
并发(ConcMarkSweepGC)是指多个线程并发执行GC,通常适用于多处理器系统中,能够提升GC的效率,但算法复杂,系统消耗较大;
性能调优参数列表:
参数及其默认值描述
-XX:LargePageSizeInBytes=4m设置用于Java堆的大页面尺寸
-XX:MaxHeapFreeRatio=70GC后java堆中空闲量占的最大比例
-XX:MaxNewSize=size新生成对象能占用内存的最大值
-XX:MaxPermSize=64m老生代对象能占用内存的最大值
-XX:MinHeapFreeRatio=40GC后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跟踪类加载器约束的相关信息
设置堆Heap大小:
-Xms20m 最小20m
-Xmx20m 最大20m
设置java虚拟机栈和本地方法栈大小:
-Xss128k
设置方法区大小:
-XX:PermSize=10M 最小10M
-XX:MaxPermSize=10M 最大10M
设置直接内存大小若不设置默认和(-Xmx同样大):
-XX:MaxDirectMemorySize=10M
当首次遭遇OOM时导出此时堆中相关信息:
-XX:-HeapDumpOnOutOfMemoryError
设置新生代大小:
-Xmn
Eden与Survivor区比例:
-XX:SurvivorRatio=
晋升老年代对象年龄
-XX:PretenureSizeThreshold=
CMS收集器提供了开关用来开启内存碎片整理当空间不够须要Full GC时触发,默认开启:
-XX:+UseCMSCompactAtFullCollection
还有另外一个参数用来设置多少次Full GC后整理一次内存碎片:
-XX:CMSFullGCsBeforeCompaction=4
打开GC日志:
-XX:+PrintGCDetails