用途 | 适用GC回收器 | 参数名 | 使用方式 | 参数说明 |
栈 | Xss | -Xss256K | 设置线程栈大小,等价于-XX:ThreadStackSize=256k | |
堆内存 | Xms | -Xms100M | 设置虚拟机最小堆内存,等价于-XX:InitialHeapSize=100M | |
Xmx | -Xmx200M | 设置虚拟机最大堆内存,等价于-XX:MaxHeapSize=200M | ||
Xmn | -Xmn2G | 设置年轻代的大小,官方推荐配置为整个堆大小的3/8,等价于同时设置-XX:NewSize和-XX:MaxNewSize | ||
NewSize | -XX:NewSize=1024m | 设置年轻代初始值为1024M | ||
MaxNewSize | -XX:MaxNewSize=1024m | 设置年轻代最大值为1024 | ||
SurvivorRatio | -XX:SurvivorRatio=8 | 设置Eden区和Survivor区的比例,默认值为8,如果新生代内存为10M,那么他们之间的比例是:8:1:1 1、只有显示使用 Eden区和Survivor区的比例,才会让比例生效,否则比例都会自动设置,至于其中的原因,请看下面的-XX:+UseAdaptiveSizePolicy 中的解释,最后 推荐使用默认打开的-XX:+UseAdaptiveSizePolicy 设置,并且不显示设置-XX:SurvivorRatio | ||
UseAdaptiveSizePolicy | -XX:+UseAdaptiveSizePolicy | 设置Parallel Scavenge收集器具有自适应调节策略,自动选择各区大小比例,默认开启 1、在这种模式下,年轻代的大小,Eden和Survivor的比例、晋升老年代的对象年龄等参数会被自动调整,已达到在堆大小、吞吐最和停顺时间之间内平衡点。 2、在手动调优比较因难的场合,可以直接使用这种自适应的方式。仅指定虛拟机的最大堆,目标的吞吐量(GCTimeRatio)和停顿时间 (MaxGCPauseMills),让虚拟机自己完成调优工作。 | ||
NewRatio | -XX:NewRatio=5 | 设置老年代和新生代的比例,默认值为2,这里比例是5:1,如果堆内存为100M,那么老年代占5/6,新生代占1/6 | ||
PretenureSizeThreshold | -XX:PretenureSizeThreshold=1024 | 指定对象占用的字节数超过n之后直接在老年代中分配,默认值0,表示最大值。 设置让大于此阈值的对象直接分配在老年代,单位为字节,只对Serial、ParNew收集器有效。 | ||
MaxTenuringThreshold | -XX:MaxTenuringThreshold=15 | 设定新生代的对象在经历多少次minor gc之后将转移到老年代,默认是15。 新生代每次MinorGC后,还存活的对象年龄+1,当对象的年龄大于设置的这个值时就进入老年代。 | ||
PrintTenuringDistribution | -XX:+PrintTenuringDistribution | 让JVM在每次MinorGC后打印出当前使用的Survivor中对象的年龄分布 | ||
TargetSurvivorRatio | -XX:TargetSurvivorRatio=50 | 垃圾收集后,表示MinorGC结束后Survivor区域中占用空间的期望比例,默认期望清理后能空出50%的空间 | ||
方法区 | 永久代 | PermSize | -XX:PermSize=256M | 设置永久代初始值为256M |
MaxPermSize | -XX:MaxPermSize=256m | 设置永久代最大值为256M | ||
元空间 | MetaspaceSize | -XX:MetaspaceSize=100M | JDK8中使用,指定元数据区大小 | |
MaxMetaspaceSize | -XX:MaxMetaspaceSize=1024m | 设置元空间的最大大小,默认大小无限制 | ||
UseCompressedOops | -XX:+UseCompressedOops | 开启压缩指针,压缩指针主要是为了解决32位操作系统内存寻址范围只有4G的限制,开启压缩指针最大寻址范围增加到32G;如果内存超过32G(Xmx>32G),开启该参数无效 | ||
UseCompressedClassPointers | -XX:+UseCompressedClassPointers | 使用压缩类指针 | ||
CompressedClassSpaceSize | -XX:CompressedClassSpaceSize | 设置Klass Metaspace的大小,默认1G | ||
直接内存 | MaxDirectMemorySize | -XX:MaxDirectMemorySize=5G | 设置直接内存的大小,在使用一些nio框架时最好设置一下此参数,此参数如果过小也有可能导致频繁触发FGC | |
OutOfMemory | HeapDumpOnOutOfMemoryError | -XX:+HeapDumpOnOutOfMemoryError | 表示在内存出现OOM的时候,生成Heap转储文件,以便后续分析,-XX:+HeapDumpBeforeFullGC和-XX:+HeapDumpOnOutMemoryError只能设置1个 | |
HeapDumpBeforeFullGC | -XX:+HeapDumpBeforeFullGC | 在执行一次FGC之前打印出Heap到文件,这两个参数主要用于调试 | ||
HeapDumpPath | -XX:HeapDumpPath=/tmp/dump.hprof | dump文件路径 | ||
OnOutOfMemoryError | -XX:OnOutOfMemoryError | 指定一个可行性程序或者脚本的路径,当发生OOM的时候,去执行这个脚本,-XX:OnOutOfMemoryError=/opt/Server/restart.sh | ||
ScavengeBeforeFullGC | -XX:+ScavengeBeforeFullGC | 在Full GC前触发一次Minor GC | ||
UseFastAccessorMethods | -XX:+UseFastAccessorMethods | 默认启用,优化原始类型的getter方法性能(get/set:Primitive Type) | ||
打印设置的XX选项及值 | 查看使用回收器 | PrintCommandLineFlags | -XX:+PrintCommandLineFlags | jinfo -flag 相关垃圾回收器参数 进程ID,可以让程序运行前打印出用户手动设置或者JVM自动设置的XX选项 |
PrintFlagsInitial | -XX:+PrintFlagsInitial | 表示打印出所有XX选项的默认值 | ||
PrintFlagsFinal | -XX:+PrintFlagsFinal | 打印出XX选项在运行程序时生效的值 java -XX:+PrintFlagsFinal -version | ||
PrintVMOptions | -XX:+PrintVMOptions | 打印JVM的参数 | ||
收集器相关选项 | Serial回收器 | UseSerialGC | -XX:+UseSerialGC | 指定使用串行垃圾收集器,新生代及老年代都是串行收集,在大堆或者多核cpu的环境中不大适合使用该种垃圾收集器 |
Parnew回收器 | UseParNewGC | -XX:+UseParNewGC | 新生代使用ParNew收集器 | |
ParallelGCThreads | -XX:ParallelGCThreads=20 | 设置并行收集线程数,STW期间 ,设置年轻代并行收集器的线程数。一般地, 最好与CPU数量相等,以避免过多的线程数影响垃圾收集性能。 在默认情况下,当CPU 数量小于8个,ParallelGCThreasd的值等于 CPU 数量。 当CPU数量大于8个,ParallelGCThreads 的值等于 3+[5*CPU_Count] / 8] | ||
Parallel回收器 | UseParallelGC | -XX:+UseParallelGC | 并行垃圾收集器,新生代使用并行收集,老年代使用串行收集,手动指定车轻代使用Parallel并行收集器热行内存回收任务。 | |
UseParallelOldGC | -XX:+UseParallelOldGC | 手动指定老年代都是使用并行回收收集器。分别适用于新生代和老年代。默认jdk8是开启的。上面两个参数,默认开启一个,另一个也会被开启。(互相激活) 并行垃圾收器,新生代使用并行手机,老年代使用并行收集,在一些低版本的JVM该参数不支持或者不生效,这两种垃圾收集适合不在乎延时需要高吞吐的环境下使用,比如说一些批处理程序。 | ||
ParallelGCThreads | -XX:ParallelGCThreads=20 | 设置并行收集线程数,STW期间 ,设置年轻代并行收集器的线程数。一般地, 最好与CPU数量相等,以避免过多的线程数影响垃圾收集性能。 在默认情况下,当CPU 数量小于8个,ParallelGCThreasd的值等于 CPU 数量。 当CPU数量大于8个,ParallelGCThreads 的值等于 3+[5*CPU_Count] / 8] | ||
MaxGCPauseMillis | -XX:MaxGCPauseMillis=100 | 1、设置最大gc停顿时间,这个时间不是设置的越小越好,在G1里,对于Young GC来说,会逐渐减少Eden区个数,对于Mixed GC,G1会调整每次Choose Cset的比例,但次数会增加。 2、为了尽可能地把停顿时间控制在MaxGCPausewills以内,收集器在工作时会调整Java 堆大小或者其他一些参数。 3、对于用户來讲,停顿时间越短体验越好。但是在服务器端,我们注重高并发,整体的吞吐量。所以服务器端适合Parallel,进行控制。 (该参数使用需谨慎。) | ||
GCTimeRatio | -XX:GCTimeRatio | 设置垃圾收集时间占总时间的比率,默认为99,也就是说垃圾收集时间占用总时间的1%,此参数只在ps收集器上有效。 1、垃圾收集时间占总时间的比例(=1 /(N + 1))。用于衡量吞吐量的大小。 2、取值范围(0,100)。默认值99,也就是垃圾回收时间不超过1%。 3、与前一个-XX:MaxGCPauseMillis参数有一定矛盾性。暂停时间越长,Radio参数就容易超过设定的比例。 | ||
CMS回收器 | UseConcMarkSweepGC | -XX:+UseConcMarkSweepGC | 1、并发垃圾收集,新生代使用并行收集,老年代采用并发收集,适合低延迟应用使用该种垃圾器。使用并发垃圾收集,相当于自动添加了参数-XX:+UseParNewGC。 2、开启该参数后会自动将-XX:+UseParNewGC打开。即:ParNew(Young区用)+CMS(Old区用 )+Serial Old的组合。 | |
CMSInitiatingOccupancyFraction | -XX:CMSInitiatingOccupancyFraction=80 | 设置CMS垃圾收集器启动回收老年代的时机,当老年代对象占比超过n时,就启动一次CMS回收周期,注意:这个参数只是设定首次CMS垃圾回收 1、JDK5及以前版本的默认值为68,即当老年代的空间使用率达到68%时,会执行一次CMS回收。JDK6及以上版本默认值为92% 2、如果内存增长缓慢,则可以设置一个稍大的值,大的阀值可以有效降低CMS的触发频律,减少老年代回收的次数可以较为明显地改善应用程序性能。反之,如果应用程序内存使用率增长很快,则应该降低这个阀值,以避免频繁触发老年代串行收集器。因此通过该选项便可以有效降低Full GC 的执行次数。 | ||
UseCMSCompactAtFullCollection | -XX:+UseCMSCompactAtFullCollection | 表示在FGC之后进行压缩,因为CMS默认不压缩空间的,以此避免内存碎片的产生。不过由于内存压缩整理过程无法并发执行,所带来的问题就是停顿时间变得更长了。 | ||
CMSFullGCsBeforeCompaction | -XX:CMSFullGCsBeforeCompaction=5 | 由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间后会产生“碎片”,使得运行效率降低。此值设置运行多少次GC以后对内存空间进行压缩、整理 | ||
ParallelCMSThreads | -XX:ParallelCMSThreads | 设置CMS的线程数量。 CMS 默认启动的线程数是(ParallelGCThreads+3)/4。 ParallelGCThreads 是年经代并行收集器的线程数。当CPU 资源比较紧张时,受到CMS收集器线程的影响,应用程序的性能在垃圾回收阶段可能会非常糟糕。 | ||
ConcGCThreads | -XX:ConcGCThreads=10 | 设置并发垃圾收集的线程数,非STW期间,默认是-XX:ParallelGCThreads/4 | ||
UseCMSInitiatingOccupancyOnly | -XX:+UseCMSInitiatingOccupancyOnly | 使用这个参数可以使CMS一直按照CMSInitiatingOccupancyFraction设定的值启动 | ||
CMSScavengeBeforeRemark | -XX:+CMSScavengeBeforeRemark | 强制hotspot虚拟机在cms remark阶段之前做一次minor gc,用于提高remark阶段的速度 | ||
CMSClassUnloadingEnabled | -XX:+CMSClassUnloadingEnabled | 开启CMS回收Perm区选项 | ||
CMSParallelInitialEnabled | -XX:+CMSParallelInitialEnabled | 用于开启CMS initial-mark阶段采用多线程的方式进行标记,用于提高标记速度,在Java8开始已经默认开启 | ||
CMSParallelRemarkEnabled | -XX:+CMSParallelRemarkEnabled | 用户开启CMS remark阶段采用多线程的方式进行重新标记,默认开启 | ||
ExplicitGCInvokesConcurrent | -XX:+ExplicitGCInvokesConcurrent | -XX:+ExplicitGCInvokesConcurrentAndUnloadsClasses这两个参数用户指定hotspot虚拟在执行System.gc()时使用CMS周期 | ||
CMSPrecleaningEnabled | -XX:+CMSPrecleaningEnabled | 指定CMS是否需要进行Pre cleaning这个阶段,这个阶段的主要工作是:1、在并发标记阶段阶段由于业务线程同步在跑,新生代中对象有可能引用到老年代的对象,产生新的引用关系,这个时候需要重新标记出老年代中被引用的对象;2、老年代中对象引用关系发生变化,这个需要把引用关系发生变化的卡表(card table)标记为dirty,提高remark标记的效率 | ||
CMSInitiatingPermOccupancyFraction | -XX:CMSInitiatingPermOccupancyFraction=80 | 设置永久代内存占比超过n启动cms回收,此参数需要配合参数-XX:+CMSClassUnloadingEnabled一起使用(Java8默认开启) | ||
CMSMaxAbortablePrecleanTime | -XX:CMSMaxAbortablePrecleanTime=5000 | 设置CMS-concurrent-abortable-preclean阶段最长持续时间,单位为ms,默认值5s。abortable prelean阶段默认在Eden区大于2M启动(通过参数:-XX:CMSScheduleRemarkEdenSizeThreshold =n设置),直到Eden区域占用率超过50%(通过参数:-XX:CMSScheduleRemarkEdenPenetration=n)时结束,同时还可以指定参数-XX:CMSMaxAbortablePrecleanLoops=n设置该阶段的循环次数(默认0,表示不限制次数),为了防止abortable pre clean阶段陷入无限等待,故设置一个最长的持续时间,达到最长持续时间之后,该阶段终止,进入remark阶段 | ||
CMSScheduleRemarkEdenSizeThreshold | -XX:CMSScheduleRemarkEdenSizeThreshold=2 | CMS-concurrent-abortable-preclean的启动时机,默认Eden区占用超过2M时启动 | ||
CMSScheduleRemarkEdenPenetration | -XX:CMSScheduleRemarkEdenPenetration=50 | CMS-concurrent-abortable-preclean的结束时机,默认Eden区占用超过50%时停止 | ||
CMSParallelInitialMarkEnabled | -XX:+CMSParallelInitialMarkEnabled | 开启初始标记过程中的并行化,进一步提升初始化标记效率 | ||
G1回收器 | 如果使用G1垃圾收集器,不建议设置-Xmn和-XX:NewRatio,毕竟可能影响G1的自动调节 | |||
UseG1GC | -XX:+UseG1GC | 使用G1垃圾收集,该种垃圾收集器比较复杂,目前在此种垃圾收集的调优经验较少,在需要大堆的应用可以考虑使用,相比并发垃圾收集器,其产生的碎片更少,且可以通过参数控制垃圾收集过程中的停顿时间 | ||
G1HeapRegionSize | -XX:G1HeapRegionSize=16M | 设置每个Region的大小。值是2的幂,范围是1MB到32MB之间,目标是根据最小的Java堆大小划分出约2048个区域。默认是堆内存的1/2000。 | ||
MaxGCPauseMillis | -XX:MaxGCPauseMillis=200 | 设置期望达到的最大GC停顿时间指标(JVM会尽力实现,但不保证达到)。默认值是200ms | ||
ParallelGCThreads | -XX:ParallelGCThreads=8 | 设置并行收集线程数,STW期间 ,设置年轻代并行收集器的线程数。一般地, 最好与CPU数量相等,以避免过多的线程数影响垃圾收集性能。 在默认情况下,当CPU 数量小于8个,ParallelGCThreasd的值等于 CPU 数量。 当CPU数量大于8个,ParallelGCThreads 的值等于 3+[5*CPU_Count] / 8] | ||
ConcGCThreads | -XX:ConcGCThreads=2 | 设置并发标记的线程数。将n设置为并行垃圾回收线程数(ParallelGCThreads)的1/4左右。 | ||
initiatingHeapOccupancyPercent | -XX:initiatingHeapOccupancyPercent=30 | 1、设置触发并发GC周期的Java堆占用率阀值。超过此值,就触发GC。默认值是45。 2、设置堆占用率的百分比(0到100) 达到这个数值的时候触发global concurrent markirg(全局并发标记),默认为 45%。值为0表示间断进行全局并发标记。 | ||
G1NewSizePercent | -XX:G1NewSizePercent=10 | 新生代的比例,G1会根据停顿时间的要求,动态调整大小,主要是调整region的个数,最大不超过-XX:G1MaxNewSizePercent(新生代占用整个堆内存的最小百分比(默认5%)、最大百分比(默认60%)) | ||
G1MaxNewSizePercent | -XX:G1MaxNewSizePercent=60 | 新生代的最大比例,G1会根据停顿时间的要求,动态调整大小,主要是调整region的个数 | ||
G1ReservePercent | -XX:G1ReservePercent=10 | 假天花板数量,作用是预留10%的空间不使用,留给并发周期过程中当可能会出现to-space exhausted的问题时候使用,防止出现to-space exhausted,预留过多可能会导致内存浪费 | ||
G1MixedGCLiveThresholdPercent | -XX:G1MixedGCLiveThresholdPercent=65 | 1、表示每个Region存活对象内存的占比,如果一个Region内存活对象内存大小超过设置的值,则不会被选入CSet,也就不会被回收,如果想MixedGC更提前可以适当提高此值。 2、设置Old区的region被回收时候的对象占比,默认占用率为85%。只有Old区的region中存活的对象占用达到了这个百分比,才会在Mixed GC中被回收。 | ||
G1HeapWastePercent | -XX:G1HeapWastePercent=5 | 1、原意表示可以浪费的百分比,通过查看源码得知,如果可回收字节数百分比小于此值,则不进行Mixed回收,在源码G1CollectorPolicy::next_gc_should_be_mixed里。 2、在global concurrent marking(全局并发标记) 结束之后,可以知道所有的区有多少空间要被回收,在每次young GC之后和再次发生Mixed GC之前,会检查垃圾占比是否达到此参数,只有达到了,下次才会发生 Mixed GC。 | ||
G1MixedGCCountTarget | -XX:G1MixedGCCountTarget | 一次global concurrent marking(全局并发标记)之后,最多执行Mixed GC的次数,默认是8。 | ||
G1OldCSetRegionThresholdPercent | -XX:G1OldCSetRegionThresholdPercent=30 | 通过这个参数指定每轮Mixed GC回收的Region最大比例,默认10%,也就是每轮Mixed GC附加的Cset的Region不超过全部Region的10%,最多10%,如果暂停时间短,那么可能会少于10%,增大此值可以减少mixed的次数,但对应停顿时间有所增加 | ||
G1PrintRegionLivenessInfo | -XX:+G1PrintRegionLivenessInfo | 打印堆内存里每个Region的存活对象信息。这个信息在标记结束后打印出来。这是一个实验性的标志。 | ||
G1TraceConcRefinement | -XX:+G1TraceConcRefinement | 如果启用,并行回收阶段的日志就会被详细打印出来;这是一个实验性的标志。 | ||
G1TraceEagerReclaimHumongousObject | -XX:+G1TraceEagerReclaimHumongousObject | 如果启用,会打印大对象的回收日志;这是一个实验性的标志。 | ||
安全点 | SafepointTimeout | -XX:+SafepointTimeout | 如果未能到达安全点,则在安全点超时后超时并发出警告或失败 | |
SafepointTimeoutDelay | -XX:SafepointTimeoutDelay=500 | 设置进入安全点的超时时间,超时则失败,会打印相关线程信息,以毫秒计 | ||
GC日志相关选项 | 常用参数 | PrintGCDetails | -XX:+PrintGCDetails | 开关参数,打印虚拟机GC详细日志,在发生垃圾回收时打印内存回收详细的日志, 并在进程退出时输出当前内存各区域的分配情况 |
PrintGCDateStamps | -XX:+PrintGCDateStamps | 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800),不可以独立使用,可以配合-XX:+PrintGCDetails使用 | ||
PrintGCTimeStamps | -XX:+PrintGCTimeStamps | 输出GC的时间戳(以基准时间的形式),程序启动到GC发生的时间秒数,不可以独立使用,可以配合-XX:+PrintGCDetails使用 | ||
PrintHeapAtGC | -XX:+PrintHeapAtGC | 打印gc前后堆详细信息,不管是minor gc还是full gc都会打印 | ||
Xloggc | -Xloggc:/tmp/xx.log | GC日志路径 | ||
其他参数 | TraceClassLoading | -XX:TraceClassLoading | 监控类的加载 | |
PrintGCApplicationStoppedTime | -XX:PrintGCApplicationStoppedTime | 打印JVM的停顿时间(不仅是GC),例如:2016-08-22T00:19:49.559+0800: 219.140: Total time for which application threads were stopped: 0.0053630 seconds | ||
PrintGCApplicationConcurrentTime | -XX:+PrintGCApplicationConcurrentTime | 打印每次垃圾回收前,程序未中断的执行时间。可与上面混合使用。例如:Application time: 0.5291524 seconds | ||
PrintReferenceGC | -XX:+PrintReferenceGC | 打印gc时处理的reference情况,记录回收了多少种不同引用类型的引用 | ||
UseGCLogFileRotation | -XX:+UseGCLogFileRotation | 设置GC日志滚动,启用GC日志文件的自动转储 | ||
NumberOfGCLogFiles | -XX:NumberOfGCLogFiles=1 | GC日志文件的循环数目 | ||
GCLogFileSize | -XX:GCLogFileSize=4M | 设置GC日志滚动大小,为了防止单个gc日志文件太大,生产上建议加上这两个参数 | ||
ErrorFile | -XX:ErrorFile=/tmp/error.log | 设置JVM crash时生成crash文件的路径 | ||
PrintSafepointStatistics | -XX:+PrintSafepointStatistics | 打印安全点统计信息,例如:vmop [threads: total initially_running wait_to_block] 1913.425: GenCollectForAllocation [ 55 2 0 ] | ||
PrintSafepointStatisticsCount | -XX:PrintSafepointStatisticsCount=1 | 设置打印安全点统计信息的次数,例如:[time: spin block sync cleanup vmop] page_trap_count [ 0 0 0 0 6 ] 0 | ||
PrintAdaptiveSizePolicy | -XX:+PrintAdaptiveSizePolicy | 可以打印出survivor的一些详细信息,关于survivor区间是否溢出,是否有对象转移到老年代 | ||
PrintTLAB | -XX:+PrintTLAB | 打印TLAB的使用情况 | ||
DisplayVMOutput | -XX:-DisplayVMOutput | 关闭在控制台输出vm信息 | ||
LogVMOutput | -XX:+LogVMOutput | 将VM输出保存到日志文件, 一般是结合以下一起用 -XX:+UnlockDiagnosticVMOptions -XX:-DisplayVMOutput -XX:+LogVMOutput -XX:LogFile=/dev/shm/vm.log | ||
LogFile | -XX:LogFile=/dev/shm/vmoutput.log | 将VM输出保存在该日志文件下 | ||
其他参数 | DisableExplicitGC | -XX:+DisableExplicitGC | 禁止在运行期显式地调用System.gc() | |
UseCodeCacheFlushing | -XX:+UseCodeCacheFlushing | 使用该参数让jvm放弃一些被编译的代码, 避免代码缓存被占满时JVM切换到interpreted-only的情况 | ||
DoEscapeAnalysis | -XX:+DoEscapeAnalysis | 是否开启逃逸分析,默认开启,关闭使用-XX:-DoEscapeAnalysis | ||
UseBiasedLocking | -XX:+UseBiasedLocking | 开启偏向锁,偏向锁是是锁偏向上次使用它的线程,在非竞争锁的场景下,可以实现无锁的开销 | ||
UseLargePages | -XX:+UseLargePages | 开启使用大页面,使用大页面可以提高TLB(translation lookaside buffer(转换后备缓存区))的缓存命中率 | ||
TLABSize | -XX:TLABSize | 设置TLAB大小 | ||
OmitStackTraceInFastThrow | -XX:+OmitStackTraceInFastThrow | 一些频繁抛出的异常,JVM为了性能优化而抛出没有堆栈的异常,默认开启 | ||
LargePageSizeInBytes | -XX:LargePageSizeInBytes=4m | 设置堆的内存页大小 | ||
SoftRefLRUPolicyMSPerMB | -XX:SoftRefLRUPolicyMSPerMB=0 | 指定每兆堆空闲空间的 soft reference 保持存活(一旦它不强可达了)的毫秒数,这意味着每兆堆中的空闲空间中的 soft reference 会(在最后一个强引用被回收之后)存活1秒钟。注意,这是一个近似的值,因为 soft reference 只会在垃圾回收时才会被清除,而垃圾回收并不总在发生。系统默认为一秒。 | ||
HeapDumpAfterFullGC | -XX:+HeapDumpAfterFullGC | 在执行一次FGC之后打印出Heap到文件 | ||
AlwaysPreTouch | -XX:+AlwaysPreTouch | 服务启动时就申请物理内存 Pre-touch the Java heap during JVM initialization. Every page of the heap is thus demand-zeroed during initialization rather than incrementally during application execution. | ||
PerfDisableSharedMem | -XX:+PerfDisableSharedMem | 将性能数据存储在标准内存中,Cassandra家的一个参数,一直没留意,直到发生高IO时的JVM停顿。原来JVM经常会默默的在/tmp/hperf 目录写上一点statistics数据,如果刚好遇到PageCache刷盘,把文件阻塞了,就不能结束这个Stop the World的安全点了。用此参数可以禁止JVM写statistics数据,代价是jps, jstat 用不了,只能用JMX取数据。有时用JMX取新生代老生代使用百分比还真没jstat方便 | ||
ParallelRefProcEnabled | -XX:+ParallelRefProcEnabled | 使用此参数激活多线程方式的引用处理,截止到目前的jdk8该参数默认关闭,如果在gc中发现处理ref处理的时间过长,可以通过参数-XX:+PrintReferenceGC打印出每次垃圾收集中记录每个引用对象类型的统计数据,另外如果发现有大量软引用正在被处理,可以使用参数-XX:SoftRefLRUPolicyPerMB调整软件用的处理策略,该参数的默认值为1000(ms),该参数的含义是,使用该参数设置的值乘以java堆可用空间(以兆为单位)的出来的值,若软引用在这段时间内没有被访问,那么这些软引用将会被回收,调优引用处理的目标主要有两点:第一是降低引用在gc过程中处理时间,第二是降低heap的占用空间,减少垃圾收集频率和最终需要复制的时间 | ||
FlightRecorder | -XX:+FlightRecorder | 允许应用程序启用飞行记录器,需要先解锁商业功能特性,-XX:+UnlockCommercialFeatures | ||
UnlockCommercialFeatures | -XX:+UnlockCommercialFeatures | 解锁商业功能特性 | ||
UnlockExperimentalVMOptions | -XX:+UnlockExperimentalVMOptions | 解锁实验型VM选项,解锁后实验型VM选项可以正常使用 | ||
UnlockDiagnosticVMOptions | -XX:+UnlockDiagnosticVMOptions | 解锁诊断型JVM参数,解锁后,诊断型VM选项可以正常使用 |
jvm 常用参数
最新推荐文章于 2023-06-09 11:39:44 发布