JVM虚拟机参数

 

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

相关文章
相关标签/搜索