JVM提供了大量的可配置参数,这些参数根据功能可以划分为几个大类:
普通分类
server
含义:服务端模式
使用方法:-server
解释:指定java进程以服务端模式运行,默认-Xms128m,-Xmx1024m;如果不指定该参数,那么java虚拟机自动根据当前所在机器cpu和内存是否大于等于2个/2g以上来自动设置为服务端模式。
如果是客户端模式,默认jvm参数:-Xms1m,-Xmx64M(一般为前段程序比如GUI),该模式启动较慢,但运行性能较快
client
含义:客户端模式
使用方式:-client
解释:该运行模式启动较快,但是性能低
Dkey=value
含义:指定系统级入参
使用方式:-Dname=张三,那么在程序中可以通过System.getProperty(“name”);来获取对应的值
内存相关参数
NewRatio
含义:新生代和老年代的比例,一般默认为1:2,即新生代占堆空间的1/3,老年代占2/3
使用方式:-XX:NewRatio=2
解释:代表:新生代:老年代 = 1:2
Xms
含义:堆内存最小值
使用方式:-xms2g 或者 -XX:InitialHeadSize=2048m
Xmx
含义:堆内存最大值
使用方式:-xmx2g 或者 -XX:MaxHeapSize=2048m
NewSize
含义:新生代对象生成时占用内存的默认值
使用方式:-XX:NewSize=10m
Xmn
含义:新生代最大值
使用方式:-Xmn1024m 或者 -XX:MaxNewSize=1024m
PermSize
含义:永久代最小值(1.7)
使用方式:-XX:PermSize=2g
MaxPermSize
含义:永久代最大值(1.7)
使用方式:-XX:MaxPermSize=2048m
MetaspaceSize
含义:元空间最小值(1.8)
使用方式:-XX:MetaspaceSize=2048m
MaxMetaspaceSize
含义:元空间最大值(1.8)
使用方式:-XX:MaxMetaspaceSize=2048m
Xss
含义:线程栈内存最大值
使用方式:-Xss128k 或者 -XX:ThreadStackSize=128k
MaxDirectMemorySize
含义:最大直接内存(该内存不属于堆内存,属于堆外,元空间也是直接内存)
使用方式:-XX:MaxDirectMemorySize=2048m
GC相关参数
SurvivorRatio
含义:eden区和survivor的比例值
使用方式:-XX:SurvivorRatio=8
解释:这个8代表了eden:survivor=8:1,什么意思呢?比如年轻代一共100M,那么eden区占1008/(8+1+1)(survivor区默认有s0和s1)=80M,s0和s1分别占1001/(8+1+1)=10M。
MaxTenuringThreshold
含义:年轻代最大GC年龄
使用方式:-XX:MaxTenuringThreshold=15(默认15)
解释:每当对象经过一次minor gc,对象GC分代年龄就会+1,当GC分代年龄超过设定数值,默认15,那么该对象会进入老年代。
PretenureSizeThreshold
含义:允许进入新生代对象的最大值,如果为0,表示无限制
使用方式:-XX:PretenureSizeThreshold=1024
解释:如果新对象进入eden区,发现对象大小大于1024,那么该对象直接进入老年代,为了避免该对象反复多次在from和to区来回复制,该参数只在Serial和ParNew收集器有效,Parallel Scavenge不识别
UseParallelGC
含义:年轻代使用Parallel Scavenge收集器
使用方式:开启:-XX:+UseParallelGC,关闭:-XX:-UseParallelGC
解释:1.7,1.8的年轻代的默认收集器,同时默认老年代收集器为:Serial Old垃圾收集器
UseSerialGC
含义:年轻代使用Serial垃圾收集器,单线程收集
使用方式:开启:-XX:+UseSerialGC,关闭:-XX:-UseSerialGC
解释:选择或关闭SerialGC垃圾收集器,性能较差,一般不用
UseParNewGC
含义:年轻代使用ParNew收集器,并行收集
使用方式:开启:-XX:+ParNewGC,关闭:-XX:-ParnewGC
UseParallelOldGC
含义:老年代使用Parallel Scavenge收集器,并行收集
使用方式:开启:-XX:+UseParallelOldGC,关闭:-XX:UseParallelGC
UseG1GC
含义:使用G1垃圾收集齐
使用方式:开启:-XX:UseG1GC,关闭:-XX:-UseG1GC
ParallelGCThreads
含义:并行执行GC操作的线程数量
使用方式:-XX:ParallelGCThreads=8
UseConcMarkSweepGC
含义:老年代使用CMS垃圾收集器,并行收集
使用方式:开启:-XX:+UseConcMarkSweepGC,关闭:-XX:-UseConcMarkSweepGC
解释:如果使用该模式,年轻代默认使用:ParNew收集器;老年代开启该模式如果失败,那么会自动启用Serial Old收集器。
CMSInitiatingOccupancyFraction
含义:触发执行CMS回收当前年代区内存占用的百分比,负数表示使用CMSTriggerRatio设置的值
使用方式:-XX:+CMSInitiatingOccupancyFraction=60(代表百分之六十)
UseCMSInitiatingOccupancyOnly
含义:只根据占用情况来执行CMS收集
使用方式:开启:-XX:+UseCMSInitiatingOccupancyOnly,关闭:-XX:-UseCMSInitiatingOccypancyOnly
UseCMSCompactAtFullCollection
含义:使用CMS执行full gc时对内存进行压缩处理
使用方式:开启:-XX:+UseCMSCompactAtFullCollection,关闭:-XX:-UseCMSCompactAtFullCollection
CMSFullGCsBeforeCompaction
含义:多少次full gc之后进行内存压缩
使用方式:-XX:CMSFullGCsBeforeCompaction=10
CMSClassUnloadingEnabled
含义:当发生CMS GC时,是否启用类卸载功能
使用方式:开启:-XX:CMSClassUnloadingEnabled,关闭:-XX:-CMSClassUnloadingEnabled
CMSParallelRemarkEnabled
含义:垃圾收集时,是否使用并且标记清理对象
使用方式:开启:-XX:CMSParallelRemarkEnabled,关闭:-XX:-CMSParallelRemarkEnabled
解释:在使用UseParNewGC收集器的时候,减少标记时间
MaxGCPauseMillils
含义:自适应大小策略的最大GC暂停时间,单位为毫秒
使用方式:-XX:MaxGCPauseMillils=100
DisableExplicitGC
含义:禁用System.gc()触发full gc
使用方式:开启:-XX:DisableExplicitGC,关闭:-XX:-DisableExplicitGC
Xloggc
含义:输出GC日志文件指定路径
使用方式:-Xloggc:/use/local/gc.log
UseGCLogFileRotation
含义:滚动GC日志文件,前提是配置了-Xloggc
使用方式:开启:-XX:+UseGCLogFileRotation,关闭:-XX:-UseGCLogFileRotation
NumberOfGCLogFiles
含义:滚动GC日志文件数量,默认为0,不滚动
使用方式:-XX:NumberOfGCLogFiles=10
GCLogFileSize
含义:GC文件滚动大小,前期是配置了UseGCLogFileRotation,设置为0表示仅通过jmd命令触发
使用方式:-XX:GCLogFileSize=10m
PrintGCDetails
含义:GC时打印更多详情日志
使用方式:开启:-XX:PrintGCDetail,关闭:-XX:PrintGCDetail
解释:可以通过jinfo -flag [+|-]PrintGCDetail 来动态设置开启和关闭
PrintGCDateStamps
含义:GC时打印时间戳信息
使用方式:开启:-XX:PrintGCDateStamps,关闭:-XX:-PrintGCDateStamps
解释:可以通过jinfo -flag [+|-]PrintGCDateStamps 来动态设置开启和关闭
PrintTenuringDistribution
含义:打印堆中存活对象实例的GC年龄信息
使用方式:开启:-XX:PrintTenuringDistribution,关闭:-XX:-PrintTenuringDistribution
PrintGCApplicationStoppedTime
含义:打印应用暂停时间
使用方式:开启:-XX:PrintGCApplicationStoppedTime,关闭:-XX:-PrintGCApplicationStoppedTime
PrintHeapAtGC
含义:GC前后打印堆区使用信息
使用方式:开启:-XX:PrintHeapAtGC,关闭:-XX:-PrintHeapAtGC
异常跟踪相关参数
HeapDumpOnOutOfMemoryError
含义:抛出堆溢出错误时导出堆信息到指定文件
使用方式:开启:-XX:HeapDumpOnOutOfMemoryError,关闭:-XX:-HeapDumpOnOutOfMemoryError
解释:可以通过jinfo -flag [+|-]HeapDumpOnOutOfMemoryError 来动态设置开启和关闭
HeapDumpPath
含义:当HeapDumpOnOutOfMemoryError开启的时候,dump文件的保存路径,默认为工作目录下的java_pid.hprof文件
使用方式:-XX:HeapDumpPath=/data/log/jvm.dump
ErroFile
含义:保存错误日志到文件中
使用方式:-XX:ErrorFile=./error.log
GCHeapFreeLimit
含义:堆空间允许空闲的临界值(这里常用于抛出JVM内存骗局,无限full gc,但是不抛出OOM的情况)
使用方式:-XX:GCHeapFreeLimit=25
解释:代表如果当前堆空闲空间小于25,那么就会抛出一个OOM错误
仅供我个人做平常开发笔记记忆使用