02-01-02、可能会用到的JVM参数

原创
2020/02/23 02:06
阅读数 80
JVM 参数是在执行java 命令是传递给jvm的参数,也是启动一个jvm进程时的参数,多个参数与参数之间用空格隔开;java 命令语法如下:
java  [ options classname  [ args ]
java  [ options -jar   filename  [ args ]
 
(HotSpot)JVM参数大致分类及常用参数如下:
标准选项(Standard Options)
-D property = value 设置系统属性值, -client-server-verbose:class-verbose:gc-verbose:jni-showversion-splash: imgname
 
非标准选项(Non-Standard Options):只适用于HotSpot 虚拟机,以 -X 开头
-Xcomp (compilation model)优先采用编译模式运行,当编译无法进行时,依然会采用解释执行,默认是采用 解释器 + 编译器 模式运行
-Xint (interprected model)强制使用解释执行模式运行,即不采用解释器 + 编译器 模式,可通过 -version 或 -showversion 查询运行模式
-Xloggc: filename 将gc日志输出到文件
-Xmn size (maxmum nursery size),设置 年轻代堆空间初始值和最大值 单位为 字节,可以加上k或K、m或M、g或G等,如:-Xmn1024m 或 -Xmn1g ,年轻代用于存放新对象,相比其他区域,年轻代gc的频率更高,若年轻代空间设置过小,gc频率会更高,若年轻代空间设置过大,则gc一次的时间会更长,oracle推荐年轻代空间大小设置为整个堆空间的 一半 到 1/4 之间。该参数是 -XX:NewSize 和 -XX:MaxNewSize 两个参数的结合
-Xms size (memory small size),设置 堆空间的初始大小,单位为字节,其值必须是1024的整数倍且大于1M,可加k、m、g等,若未设置此参数,则堆的初始大小为年轻代 和老年代 初始值之和
-Xmx size (memory max size),设置 堆空间的最大值,单位为字节,其值必须是1024的整数倍且大于2M,可加k、m、g等,其默认值是根据运行时系统配置决定的,通常在生产环境中,-Xmssize 和 -Xmxsize 设置为相同的值,避免内存扩展带来的抖动。-Xmxsize 与 -XX:MaxHeapSize 等效。
-Xnoclassgc 关闭类垃圾回收,这样可以减少一些gc时间,但永久代中的方法区类将一直存在,不会被回收。
-Xss size (set thread stack size)设置线程堆栈大小,单位字节,不同的操作系统,其默认值不同,一般32位机默认320KB,64位机1024KB, Linux/ARM (32-bit): 320 KBLinux/i386 (32-bit): 320 KBLinux/x64 (64-bit): 1024 KBOS X (64-bit): 1024 KBOracle Solaris/i386 (32-bit): 320 KBOracle Solaris/x64 (64-bit): 1024 KB。-Xsssize 与 -XX:ThreadStackSize 等效
-Xverify: mode 设置class文件字节码验证模式,model 可选值有 remote(验证所有不是由启动类加载器加载的类,若未设置-Xverify:model选项,这个是默认值)all(验证所有的class文件)none(不开启验证),建议使用默认值
 
高级运行时选项(Advanced Runtime Options):这些选项控制HotSpot VM 运行时行为,参数以 -XX: 开头,后面接选项,一般选项前 有 ‘+’ (加号)表示开启,有‘-’(减号)表示关闭
-XX:ErrorFile= filename 指定发生不可恢复错误时将错误数据写入的路径和文件,默认情况下,错误信息输出到当前工作目录的 hs_err_pid pid .log 文件中,其中pid是导致错误的进程标识符,pid 可以用%p占位符设置。如 -XX:ErrorFile=/jvmlog/error_%p.log , 如果由于空间不足,权限问题或其他问题而无法在指定目录中创建文件,则将在操作系统的临时目录中创建文件。临时目录为 /tmp
-XX:+ FlightRecorder 启用 Java Flight Recorder(JFR)-XX:-FlightRecorder 禁用 Java Flight Recorder,这是一个商业功能,需与 -XX:+UnlockCommercialFeatures 结合使用,同时,在启用 JFR 的情况下,可以通过 -XX:FlightRecorderOptions =  参数  =  设置JFR 行为
-XX:MaxDirectMemorySize= size 设置NIO的直接缓冲区内存最大值,单位为字节,可以加上k或K、m或M、g或G等
-XX:NativeMemoryTracking= mode 指定用于跟踪JVM本机使用情况的模式,model可选值: off(关闭,这是默认值), summary仅跟踪JVM子系统(例如Java堆,类,代码和线程)的内存使用情况。), detail除了跟踪JVM子系统的内存使用情况之外,还跟踪单个 CallSite ,单个虚拟内存区域及其提交区域的内存使用情况。
-XX:ObjectAlignmentInBytes= alignment 设置java对齐方式,单位为字节,默认为8字节。 指定的值应为2的幂,并且必须在8到256(含)范围内
-XX:OnError= string 设置在发生不可恢复的错误是执行的(多个)命令,多个命令间用‘;’(分号)隔开,如:-XX:OnError=" gcore%p; dbx-%p"
-XX:OnOutOfMemoryError= string 设置首次发生 OutOfMemoryError时执行的(多个)命令,多个命令间用‘;’(分号)隔开。
-XX:+ShowMessageBoxOnError 启用在发生不可恢复错误时显示对话框,这样可以让在发生错误是JVM进程不会关闭,以便调试。
-XX:ThreadStackSize= size 与 -Xsssize 等效
-XX:+TraceClassLoading
-XX:+TraceClassLoadingPreorder 启用对所有已加载类的引用顺序的跟踪。默认情况下,此选项是禁用的,并且不会跟踪类。
-XX:-UseBiasedLocking 禁用偏向锁定。
-XX:-UseCompressedOops 禁用压缩指针的使用。默认情况下,此选项处于启用状态,并且当Java堆大小小于32 GB时,将使用压缩指针。启用此选项后,对象引用将表示为32位偏移量而不是64位指针,这通常在运行Java堆大小小于32 GB的应用程序时提高性能。此选项仅适用于64位JVM。
 
 
高级JIT编译器选项(Advanced JIT Compiler Options):参数以 -XX: 开头,后面接选项,一般选项前 有 ‘+’ (加号)表示开启,有‘-’(减号)表示关闭
-XX:CICompilerCount= threads 设置编译线程数量,client模式默认是1,server模式默认是2
-XX:CodeCacheMinimumFreeSpace= size 设置编译所需的最小空间,单位为字节,默认 500KB,当空间小于设定值时编译将停止
-XX:CompileThreshold= invocations 设置编译之前解释执行方法的调用次数,当达到这个次数后进行编译执行,server模式下,执行10,000次解释执行,以进行执行信息收集用于编译执行,client模式下,执行1,500次解释执行后编译执行。
-XX:+DoEscapeAnalysis 启用转义分析(逃逸分析)。默认情况下启用此选项。要禁用转义分析,请指定 -XX:-DoEscapeAnalysis 。仅Java HotSpot Server VM支持此选项。
-XX:InitialCodeCacheSize= size 设置代码初始缓存大小, 默认值设置为500 KB,热点编译代码缓存可以提高执行性能,如: -XX:InitialCodeCacheSize= 256m
-XX:ReservedCodeCacheSize= size 设置代码最大缓存大小,默认值240MB,若关闭分层编译,则默认值为48MB,该值必须不小于初始值
-XX:+Inline 启用方法内联。默认情况下启用此选项以提高性能。要禁用方法内联,请指定 -XX:-Inline
-XX:InlineSmallCode= size 最大可以内联的编译方法代码大小,单位为字节,默认值 1000 字节。可加k、m、g
-XX:+LogCompilation 允许将编译活动记录到hotspot.log当前工作目录中命名的文件中。您可以使用该-XX:LogFile选项指定其他日志文件路径和名称。
默认情况下,此选项为禁用状态,并且不记录编译活动。该-XX:+LogCompilation选项必须与用于-XX:UnlockDiagnosticVMOptions解锁诊断JVM选项的选项一起使用。每次使用该-XX:+PrintCompilation选项编译方法时,都可以使用打印到控制台的消息来启用详细的诊断输出。
-XX:MaxInlineSize= size 进行内联编译的最大字节码大小,默认35kB
-XX:MaxNodeLimit= nodes 在单个方法编译期间要使用的最大节点数。默认情况下,最大节点数设置为65,000
-XX:MaxTrivialSize= size 默认值6字节
-XX:+OptimizeStringConcat 启用优化 String 串联操作。默认情况下启用此选项。仅Java HotSpot Server VM支持此选项。
-XX:+PrintCompilation 每次编译方法时,通过将消息打印到控制台来启用JVM的详细诊断输出。这使您可以查看实际编译了哪些方法。默认情况下,此选项处于禁用状态,并且不打印诊断输出。您也可以使用该-XX:+LogCompilation选项将编译活动记录到文件中。
-XX:+PrintInlining 启用内联决策的打印。这使您可以查看要内联的方法。
-XX:-TieredCompilation 关闭分层编译,默认是开启分层编译。
-XX:+UseAES 启用AES,即启用硬件的AES内部函数
 
 
高级服务选项(Advanced Serviceability Options):一般用于调试或监控,参数以 -XX: 开头,后面接选项,一般选项前 有 ‘+’ (加号)表示开启,有‘-’(减号)表示关闭
-XX:+HeapDumpOnOutOfMemoryError 在发送OOM是输出堆信息到文件
-XX:HeapDumpPath= path 输出堆信息到文件路径
-XX:LogFile= path jvm日志路径
-XX:+PrintClassHistogram
-XX:+PrintConcurrentLocks 启用java.util.concurrent在Control+C事件(SIGTERM)之后打印锁。默认情况下,此选项是禁用的。设置此选项等效于运行jstack -l命令或jcmd pid Thread.print -l命令,其中pid是当前Java进程标识符。
 
高级垃圾收集选项(Advanced Garbage Collection Options): 这些选项控制Java HotSpot VM如何执行垃圾回收(GC)
-XX:+AggressiveHeap 启用Java堆优化。根据计算机(RAM和CPU)的配置,这会将各种参数设置为最适合长时间运行且需要大量内存分配的作业的参数。默认情况下,该选项处于禁用状态。
-XX:+AlwaysPreTouch 一启动时就填充堆的每一个页面,用于模拟一个运行很久的系统。
-XX:+CMSClassUnloadingEnabled 启用CMS收集器
-XX:CMSExpAvgFactor= percent 设置在计算并发集合统计信息的指数平均值时用于加权当前样本的时间百分比(0到100)。默认情况下,指数平均系数设置为25%。
-XX:CMSInitiatingOccupancyFraction= percent 设置开始CMS收集周期的旧占用百分比(0到100)。默认值设置为-1。
-XX:+CMSScavengeBeforeRemark 在CMS进行标记步骤前尝试进行清除?
-XX:CMSTriggerRatio= percent 出发CMS收集的比例,默认80%
-XX:ConcGCThreads= threads 设置用于并发收集的线程数
-XX:+DisableExplicitGC 用于关闭对手动调用System.gc()的处理,默认是开启对手动调用System.gc()的处理的。
-XX:+ExplicitGCInvokesConcurrent 当手动调用System.gc()时将出发并行回收,该选项默认是关闭的,并且只能与 -XX:+CMSScavengeBeforeRemark一起使用
-XX:G1HeapRegionSize= size 设置使用G1收集器时堆内存区块分块大小,可选值在1MB 到 32MB 之间。
-XX:+G1PrintHeapRegions 开启 打印有关G1收集器分配了哪些区域以及回收了哪些区域的信息。默认情况下,此选项是禁用的。
-XX:G1ReservePercent= percent 设置保留为错误上限的堆百分比(0到50),以减少G1收集器升级失败的可能性。默认情况下,此选项设置为10%。
-XX:InitialHeapSize= size 设置初始堆大小,值为0或1024的整数倍,若设置为0,则堆大小为年轻代和老年代的大小之和;若不为0,则必须大于1MB
-XX:InitialSurvivorRatio= ratio 设置吞吐量垃圾收集器使用的初始幸存者空间比率(由-XX:+UseParallelGC和/或- XX:+UseParallelOldGC选项启用)。默认情况下,吞吐量垃圾收集器通过使用-XX:+UseParallelGC和-XX:+UseParallelOldGC选项来启用自适应大小调整,并根据应用程序的行为从初始值开始调整幸存空间的大小。如果禁用了自适应大小调整(使用该-XX:-UseAdaptiveSizePolicy选项),-XX:SurvivorRatio则应使用该选项来设置整个应用程序执行过程中幸存者空间的大小。
以下公式可用于根据年轻代(Y)的大小和初始幸存者空间比率(R)计算幸存者空间的初始大小(S):
S = Y /(R + 2)
等式中的2表示两个幸存空间。指定为初始幸存者空间比率的值越大,初始幸存者空间大小越小。
默认情况下,初始生存者空间比率设置为8。如果使用了年轻代空间大小的默认值(2 MB),则生存者空间的初始大小将为0.2 MB。
-XX:InitiatingHeapOccupancyPercent= percent 设置开始并发GC周期的堆占用百分比(0到100)。它由垃圾收集器使用,该垃圾收集器基于整个堆的占用而触发一个并发的GC周期,而不仅仅是整个世代之一(例如,G1垃圾收集器)。默认情况下,初始值设置为45%。值为0表示不间断的GC循环。
-XX:MaxGCPauseMillis= time 设置最大GC暂停时间的目标(以毫秒为单位)。这是一个软目标,JVM将尽最大的努力来实现它。默认情况下,没有最大暂停时间值。
-XX:MaxHeapSize= size 设置内存分配池的最大大小(以字节为单位)。此值必须是1024的倍数且大于2 MB。
-XX:MaxHeapFreeRatio= percent 设置GC事件后允许的最大可用堆空间百分比(0到100)。如果可用堆空间扩展到该值以上,则堆将缩小。默认情况下,此值设置为70%。
-XX:MaxMetaspaceSize= size 设置可以分配给类元数据的最大本机内存。默认情况下,大小不受限制。应用程序的元数据量取决于应用程序本身,其他正在运行的应用程序以及系统上可用的内存量。
-XX:MaxNewSize= size
-XX:MaxTenuringThreshold= threshold 设置用于自适应GC大小调整的最大使用期限阈值。最大值为15。并行(吞吐量)收集器的默认值为15,而CMS收集器的默认值为6。
-XX:NewRatio= ratio 设置新生代和老年代大小之间的比率。默认情况下,此选项设置为2。
-XX:NewSize= size 新生代初始大小
-XX:ParallelGCThreads= threads 设置年轻一代和老一代中用于并行垃圾回收的线程数。缺省值取决于JVM可用的CPU数量。
-XX:+ParallelRefProcEnabled 启用并行参考处理。默认情况下,此选项是禁用的。
-XX:+PrintAdaptiveSizePolicy 允许打印有关自适应发电规模的信息。默认情况下,此选项是禁用的
-XX:+PrintGC
-XX:+PrintGCApplicationConcurrentTime
-XX:+PrintGCApplicationStoppedTime
-XX:+PrintGCDateStamps
-XX:+PrintGCDetails
-XX:+PrintGCTaskTimeStamps
-XX:+PrintGCTimeStamps
-XX:+PrintStringDeduplicationStatistics 打印详细的重复数据删除统计信息。默认情况下,此选项处于禁用状态。参见 -XX:+UseStringDeduplication 选项。
-XX:+PrintTenuringDistribution
-XX:+ScavengeBeforeFullGC 在每个FullGC之前启用年轻代GC。默认情况下启用此选项。建议您 不要 禁用它。
-XX:SurvivorRatio= ratio
-XX:TargetSurvivorRatio= percent
-XX:TLABSize= size
-XX:+UseAdaptiveSizePolicy
-XX:+UseConcMarkSweepGC
-XX:+UseG1GC
-XX:+UseParallelGC
-XX:+UseParallelOldGC
-XX:+UseParNewGC
-XX:+UseSerialGC
-XX:+UseStringDeduplication 启用字符串重复数据删除。默认情况下,此选项处于禁用状态。要使用此选项,必须启用垃圾优先(G1)垃圾收集器。参见 -XX:+UseG1GC 选项。
-XX:+UseTLAB 允许在年轻代空间中使用线程本地分配块(TLAB)。默认情况下启用此选项
 
HotSpot JVM 包含两个编译器,一个是Client compiler ,另一个是Server compiler,当使用Cilent 模式运行时,使用的是Client compiler,它编译速度快;当使用Server模式运行时,使用Server compiler,它编译优化程度更高;当在server模式下开启分层编译时(1.7后默认是开启),两个编译器都使用,分层的第0层代码解释执行,第一层使用Cilent compiler编译,第二层使用Server compiler编译。

 

 

 

写得不好,说得不一定对,希望您带着批判性阅读,希望您能多提提宝贵意见,希望不误人子弟。也没很细致校对,错误之处望不吝指出,谢谢!

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部