#> java -XX:+PrintFlagsInitial -- 查看所有配置参数
JVM支持的性能相关选项
选项 | 描述 |
-Xms | 初始堆的大小。如不指定,初始化大小为分配的年轻代和老年代的和。配置示例:-Xms100m |
-Xmx | 最大堆内存。对于服务器端部署,-Xms和-Xmx经常设置为一个值,这样可以节省程序运行过程中调整堆内存分配的耗时。配置示例:-Xmx100m |
-Xmn | 年轻代的初始值及最大值。官方推荐该值为堆内存的1/2~1/4之间。配置示例:-Xmn100m |
-XX:NewSize=size | 年轻代的初始值 |
-XX:MaxNewSize=size | 年轻代最大值 |
-XX:MetaspaceSize=size | 元数据空间的初始值。持久代在JDK 8版本被移除,因此-XX:PermSize已经禁用 |
-XX:MaxMetaspaceSize=size | 分配用于类元数据的本地内存上限,默认不受限。持久代在JDK 8版本被移除,因此-XX:MaxPermSize已经禁用 |
-Xss | 线程栈大小。默认值与平台相关。配置示例:-Xss512k |
-XX:ThreadStackSize=size | 等价于-Xss |
-XX:NewRatio=ratio | 设置年轻代和老年代大小的比值,取值为整数,默认为2 |
-XX:SurvivorRatio=ratio | Eden区和Survivor区大小的比值,取值为整数,默认值为8 |
-XX:LargePageSizeInBytes=size | 堆内存的内存页大小,默认为0,表示由JVM动态选择 |
-XX:+DisableExplicitGC | 禁用System.gc。该参数只是禁止调用System.gc,但是JVM在需要时仍旧会执行垃圾回收 |
-XX:MaxTenuringThreshold=threshold | 在新生代中对象存活次数(经过Minor GC的次数)后仍然存活,就会晋升到旧生代。最大值15。并行收集器的默认值为15,CMS收集器的默认值为6。 |
-XX:+AggressiveOpts | 开启新的编译器性能优化选项,默认禁用实验性优化特征。实验性特征虽然会提高性能,但是会影响稳定性。 |
-XX:+UseBiasedLocking | 应用偏向锁,使得锁更偏爱上次使用到它的线程。在非竞争锁的场景下,即只有一个线程会锁定对象,可以实现近乎无锁的开销。 |
-Xnoclassgc | 禁用类的垃圾回收,即类对象(Class)不会被回收 |
-XX:SoftRefLRUPolicyMSPerMB=time | 每兆空闲堆内存中,SoftReference对象在最后一次引用后的存活时间(单位为毫秒),默认是1秒钟 |
-XX:MaxHeapFreeRatio=percent | 垃圾回收后,堆内存空闲空间最大允许百分比,如果超过该值,堆内存将收缩。 |
-XX:MinHeapFreeRatio=percent | 垃圾回收后,堆内存空闲空间最小允许百分比,如果低于该值,堆内存将扩大。 |
-XX:+ParallelRefProcEnabled | 启用并行引用处理。如果应用存在大量的引用或者finalizable对象需要处理,添加该选项可以减少垃圾回收时间。 |
-XX:TargetSurvivorRatio=percent | 设定幸存区的目标使用率。 |
-XX:+UseGCOverheadLimit | 限定JVM耗费在GC上的时间百分比。该选项默认启用,当JVM 98%的时间用于垃圾回收并且少于2%的堆被恢复时,抛出内存溢出异常。当堆较小时,该选项可以用于避免应用长时间没响应。可以通过-XX:-UseGCOverheadLimit禁用该选项。 |
-XX:+UseSerialGC | 启用串行收集器 |
|
|
|
|
并行收集器性能相关选项
选项 | 描述 |
-XX:+UseParallelGC | 启用并行垃圾收集器,以便利用多核提升性能。如果配置了该选项,那么-XX:+UseParallelOldGC默认启用。 |
-XX:+UseParNewGC | 年轻代采用并行收集,默认该选项禁用,但是如果设置了-XX:+UseConcMarkSweepGC选项,则会自动开启。对于仅设置该选项。但是不设置XX:+UseConcMarkSweepGC的情况,JDK8已经禁用。 |
-XX:+UseParallelOldGC | Full GC采用并行收集,默认禁用。如果设置了-XX:+UseParallelGC则自动启用。 |
-XX:ParallelGCThreads=threads | 年轻代及老年代并行垃圾回收使用的线程数。默认值依赖于JVM使用的CPU个数。 |
-XX:MaxGCPauseMillis | 垃圾回收最大暂停时间,单位为毫秒。该选项仅是一个软目标,如不满足,JVM将会自动调整堆和相关选项。 |
-XX:+UseAdaptiveSizePolicy | 自动选择年轻代大小和相应的Survivor区比例,以达到目标系统规定的最低响应时间或者收集频率。该选项默认开启,若要禁用则需要添加-XX:-UseAdaptiveSizePolicy并且设置-XX:SurvivorRatio。对于并行收集器,建议打开该选项。 |
CMS收集器性能相关选项
选项 | 描述 |
-XX:+UseConcMarkSweepGC | 对于老年代,启用CMS垃圾收集器。当并行垃圾收集器无法满足应用的延迟需求时,官方推荐使用CMS收集器或者G1收集器。启用该选项后,-XX:+UseParNewGC自动启用,且无法禁用(即不可以添加-XX:-UseParNewGC) |
-XX:+AggressiveHeap | 启用Java堆内存优化。该选项设置各种参数以适用于运行时间长、内存分配密集的任务,基于内存和处理器配置。默认禁用。 |
-XX:+UseCMSInitiatingOccupancyOnly | 使用-XX:CMSInitiatingOccupancyFraction的值作为老年代的空间使用率限制来启动CMS垃圾回收。如果没有配置该选项,那么HotSpot JVM只利用这个值来启动第一次CMS垃圾回收,以后均使用HotSpot JVM自动计算的值。 |
-XX:CMSInitiatingOccupancyFraction=percent | 设置老年代的占用百分比,当到达该值之后将启动CMS回收,格式为整数。默认为-1,如果为负数,则表示使用-XX:CMSTriggerRatio确定初始的占用比。 |
-XX:+CMSClassUnloadingEnabled | 启用类卸载,默认启用,可以通过-XX:-CMSClassUnloadingEnabled禁用 |
-XX:+CMSScavengeBeforeRemark | 在执行CMS remark之前进行一次Minor GC,这样能有效降低remark的时间。 |
G1收集器性能相关选项
选项 | 描述 |
-XX:+UseG1GC | 启用G1收集器。G1是服务器类型的收集器,用于多核、大内存的机器。它在保持较高吞吐量的情况下,高概率满足GC暂停时间的目标。G1收集器推荐用于那些需要较大堆内存(6GB以上)并存在GC延迟需求(稳定且可预测暂停时间低于0.5秒)的应用。 |
-XX:InitiatingHeapOccupancyPercent=percent | 设置堆内存占用比,超过该比值之后,将启动并发垃圾回收,格式为整数。 |
-XX:ConcGCThreads=threads | 设置用于并发垃圾回收的线程数,默认值依赖于JVM使用CPU个数 |
-XX:G1ReservePercent=percent | 设置堆内存预留空间百分比,以降低目标空间溢出的风险。默认值是10%。 |
-XX:G1HeapRegionSize | 设置G1区域的大小,范围是1MB到32MB之间。目的是根据最小的Java堆内存划分出约2048个区域。 |
-XX:+UseStringDeduplication | 启用重复字符串删除(String deduplication),该选项仅用于G1收集器。字符串重复数据删除利用大多数字符串相同的情况减少了字符串对象的内存足印。这种情况下,相同字符串指向并共享同一个字符数组,而非每一个字符串一个 |
-XX:+UseTLAB | 年轻代中使用本地线程收集块。 |
JVM打印相关选项
选项 | 描述 |
-XX:+PrintGC | 打印每次GC的信息 |
-XX:+PrintGCApplicationConcurrentTime | 打印最后一次暂停之后所经过的时间,即应用并发执行的时间 |
-XX:+PrintGCApplicationStoppedTime | 打印GC时应用暂停时间 |
-XX:+PrintGCDateStamps | 打印每次GC的日期时间戳 |
-XX:+PrintGCDetails | 打印每次GC的详细信息 |
-XX:+PrintGCTaskTimeStamps | 打印每个GC工作线程任务的时间戳 |
-XX:+PrintGCTimeStamps | 打印每次GC的时间戳 |