设置内存分配池的初始大小(以字节为单位)。该值必须为0或1024的倍数且大于1 MB。附加字母k或K表示千字节,m或M指示兆字节,g或G指示千兆字节。根据系统配置在运行时选择默认值。请参阅Java SE HotSpot虚拟机垃圾收集调整指南中的“人体工程学”部分。

以下示例显示如何使用各种单位将分配的内存大小设置为6 MB:

-XX:InitialHeapSize = 6291456-XX:InitialHeapSize = 6144k-XX:InitialHeapSize = 6m

如果将此选项设置为0,则初始大小将设置为为旧代和年轻代分配的大小的总和。可以使用-XX:NewSize选项设置年轻代的堆大小。-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。

以下示例显示如何将初始幸存者空间比率设置为4:

-XX:InitialSurvivorRatio = 4-XX:InitiatingHeapOccupancyPercent =百分比设置启动并发GC循环的堆占用百分比(0到100)。它由垃圾收集器使用,它根据整个堆的占用而触发并发GC循环,而不仅仅是其中一代(例如,G1垃圾收集器)。

默认情况下,初始值设置为45%。值0表示不间断的GC循环。以下示例显示如何将启动堆占用率设置为75%:

-XX:InitiatingHeapOccupancyPercent = 75-XX:MaxGCPauseMillis =时间设置最大GC暂停时间的目标(以毫秒为单位)。这是一个软目标,JVM将尽最大努力实现它。默认情况下,没有最大暂停时间值。

以下示例显示如何将最大目标暂停时间设置为500毫秒:

-XX:MaxGCPauseMillis = 500-XX:MaxHeapSize =size设置内存分配池的最大大小(以字节为单位)。该值必须是1024的倍数且大于2 MB。附加字母k或K表示千字节,m或M指示兆字节,g或G指示千兆字节。根据系统配置在运行时选择默认值。对于服务器部署,-XX:InitialHeapSize并-XX:MaxHeapSize经常设置为相同的值。请参阅Java SE HotSpot虚拟机垃圾收集调整指南中的“人体工程学”部分。

以下示例显示如何使用各种单位将分配的内存的最大允许大小设置为80 MB:

-XX:MaxHeapSize = 83886080-XX:MaxHeapSize = 81920k-XX:MaxHeapSize = 80m

在Oracle Solaris 7和Oracle Solaris 8 SPARC平台上,此值的上限约为4,000 MB减去间接费用金额。在Oracle Solaris 2.6和x86平台上,上限约为2,000 MB减去间接费用金额。在Linux平台上,上限约为2,000 MB减去间接费用金额。

该-XX:MaxHeapSize选项相当于-Xmx。-XX:MaxHeapFreeRatio =百分比设置GC事件后允许的最大空闲堆空间百分比(0到100)。如果可用堆空间扩展到此值以上,则堆将缩小。默认情况下,此值设置为70%。

以下示例显示如何将最大可用堆比率设置为75%:

-XX:MaxHeapFreeRatio = 75-XX:MaxMetaspaceSize =size设置可以为类元数据分配的最大本机内存量。默认情况下,大小不受限制。应用程序的元数据量取决于应用程序本身,其他正在运行的应用程序以及系统上可用的内存量。

以下示例显示如何将最大类元数据大小设置为256 MB:

-XX:MaxMetaspaceSize =256米-XX:MaxNewSize =size设置年轻代(托儿所)的堆的最大大小(以字节为单位)。默认值按人体工程学设置。-XX:MaxTenuringThreshold =threshold设置自适应GC大小调整中使用的最大暂定阈值。最大值为15.并行(吞吐量)收集器的默认值为15,CMS收集器的默认值为6。

以下示例显示如何将最大期限阈值设置为10:

-XX:MaxTenuringThreshold = 10-XX:MetaspaceSize =size设置分配的类元数据空间的大小,该空间将在第一次超出时触发垃圾回收。根据使用的元数据量,增加或减少垃圾收集的阈值。默认大小取决于平台。-XX:MinHeapFreeRatio =百分比设置GC事件后允许的最小空闲堆空间百分比(0到100)。如果可用堆空间低于此值,则将扩展堆。默认情况下,此值设置为40%。

以下示例显示如何将最小可用堆比率设置为25%:

-XX:MinHeapFreeRatio = 25-XX:NewRatio =ratio设置年轻和老一代尺寸之间的比率。默认情况下,此选项设置为2.以下示例显示如何将年轻/旧比率设置为1:

-XX:NewRatio = 1-XX:NewSize =size设置年轻代(托儿所)的堆的初始大小(以字节为单位)。附加字母k或K表示千字节,m或M指示兆字节,g或G指示千兆字节。

堆的年轻代区域用于新对象。GC在该区域比在其他区域更频繁地进行。如果年轻一代的规模太小,那么将会执行大量的小型GC。如果尺寸太大,则只会执行完整的GC,这可能需要很长时间才能完成。Oracle建议您将年轻代的大小保持在整个堆大小的一半到四分之一之间。

以下示例显示如何使用各种单位将年轻代的初始大小设置为256 MB:

-XX:NewSize = 256m-XX:NewSize = 262144k-XX:NewSize = 268435456

该-XX:NewSize选项相当于-Xmn。-XX:ParallelGCThreads =threads设置用于年轻和老年代的并行垃圾收集的线程数。默认值取决于JVM可用的CPU数。

例如,要将并行GC的线程数设置为2,请指定以下选项:

-XX:ParallelGCThreads = 2-XX:+ ParallelRefProcEnabled启用并行参考处理。默认情况下,禁用此选项。-XX:+ PrintAdaptiveSizePolicy允许打印有关自适应生成大小的信息。默认情况下,禁用此选项。-XX:+ PrintGC允许在每个GC上打印消息。默认情况下,禁用此选项。-XX:+ PrintGCApplicationConcurrentTime允许打印自上次暂停后经过的时间(例如,GC暂停)。默认情况下,禁用此选项。-XX:+ PrintGCApplicationStoppedTime允许打印暂停(例如,GC暂停)持续多长时间。默认情况下,禁用此选项。-XX:+ PrintGCDateStamps允许在每个GC上打印日期戳。默认情况下,禁用此选项。-XX:+ PrintGCDetails允许在每个GC上打印详细消息。默认情况下,禁用此选项。-XX:+ PrintGCTaskTimeStamps允许为每个GC工作线程任务打印时间戳。默认情况下,禁用此选项。-XX:+ PrintGCTimeStamps允许在每个GC上打印时间戳。默认情况下,禁用此选项。-XX:+ PrintStringDeduplicationStatistics打印详细的重复数据删除统计信息。默认情况下,禁用此选项。请参阅-XX:+UseStringDeduplication选项。-XX:+ PrintTenuringDistribution允许打印终身年龄信息。以下是输出的示例:

期望的幸存者大小48286924字节,新阈值10(最大10)- 年龄1:28992024字节,28992024总计- 年龄2:1366864字节,30358888总计- 年龄3:1425912字节,31784800总计...

1岁对象是最年轻的幸存者(它们是在之前的清除之后创建的,在最近的清除中幸存下来,并从伊甸园迁移到幸存者空间)。2岁的物体在两次清除中幸存下来(在第二次清除期间,它们被从一个幸存者空间复制到下一个幸存者空间)。等等。

在前面的示例中,28 992 024个字节在一次清除中幸存,并从eden复制到幸存者空间,1 366 864个字节由2岁对象占用,等等。每行中的第三个值是年龄n的对象的累积大小或减。

默认情况下,禁用此选项。-XX:+ ScavengeBeforeFullGC在每个完整GC之前启用年轻代的GC。默认情况下启用此选项。Oracle建议您不要禁用它,因为在完整GC之前清除年轻代可以减少从旧代空间到年轻代空间可到达的对象数。要在每个完整GC之前禁用年轻代的GC,请指定-XX:-ScavengeBeforeFullGC。-XX:SoftRefLRUPolicyMSPerMB =时间设置软件可访问对象在上次引用后在堆上保持活动状态的时间(以毫秒为单位)。默认值是堆中每个可用兆字节的生存期的一秒。该-XX:SoftRefLRUPolicyMSPerMB选项接受整数值,表示每兆字节当前堆大小(对于Java HotSpot客户端VM)的毫秒数或最大可能堆大小(对于Java HotSpot Server VM)。这种差异意味着客户端VM倾向于刷新软引用而不是增加堆,而服务器VM倾向于增加堆而不是刷新软引用。在后一种情况下,-Xmx选项的值对软引用的垃圾收集速度有显着影响。

以下示例显示如何将值设置为2.5秒:

-XX:SoftRefLRUPolicyMSPerMB = 2500-XX:StringDeduplicationAgeThreshold =thresholdString达到指定年龄的对象被视为重复数据删除的候选对象。对象的年龄是对垃圾收集存活多少次的度量。这有时被称为终身;看到-XX:+PrintTenuringDistribution选项。请注意,String在达到此年龄之前提升到旧堆区域的对象始终被视为重复数据删除的候选对象。此选项的默认值为3。请参阅-XX:+UseStringDeduplication选项。-XX:SurvivorRatio =比率设置伊甸园空间大小与幸存者空间大小之间的比率。默认情况下,此选项设置为8.以下示例显示如何将eden / survivor空间比率设置为4:

-XX:SurvivorRatio = 4-XX:TargetSurvivorRatio =百分比设置年轻垃圾收集后使用的幸存者空间(0到100)的所需百分比。默认情况下,此选项设置为50%。

以下示例显示如何将目标幸存者空间比率设置为30%:

-XX:TargetSurvivorRatio = 30-XX:TLABSize =size设置线程局部分配缓冲区(TLAB)的初始大小(以字节为单位)。附加字母k或K表示千字节,m或M指示兆字节,g或G指示千兆字节。如果此选项设置为0,则JVM会自动选择初始大小。

以下示例显示如何将初始TLAB大小设置为512 KB:

-XX:TLABSize = 512K-XX:+ UseAdaptiveSizePolicy允许使用自适应生成大小。默认情况下启用此选项。要禁用自适应生成大小调整,请明确指定-XX:-UseAdaptiveSizePolicy和设置内存分配池的大小(请参阅-XX:SurvivorRatio选项)。-XX:+ UseCMSInitiatingOccupancyOnly允许使用占用值作为启动CMS收集器的唯一标准。默认情况下,此选项已禁用,可能会使用其他条件。-XX:+ UseConcMarkSweepGC允许为旧一代使用CMS垃圾收集器。Oracle建议您在spam(-XX:+UseParallelGC)垃圾收集器无法满足应用程序延迟要求时使用CMS垃圾收集器。G1垃圾收集器(-XX:+UseG1GC)是另一种选择。

默认情况下,禁用此选项,并根据计算机的配置和JVM的类型自动选择收集器。启用此选项后,将-XX:+UseParNewGC自动设置该选项,您不应禁用该选项,因为JDK 8中已弃用以下选项组合:-XX:+UseConcMarkSweepGC -XX:-UseParNewGC。-XX:+ UseG1GC允许使用垃圾优先(G1)垃圾收集器。它是一个服务器式垃圾收集器,针对具有大量RAM的多处理器机器。它以高概率满足GC暂停时间目标,同时保持良好的吞吐量。G1收集器推荐用于需要大堆(大小约为6 GB或更大)且GC延迟要求有限的应用(稳定且可预测的暂停时间低于0.5秒)。

默认情况下,禁用此选项,并根据计算机的配置和JVM的类型自动选择收集器。-XX:+ UseGCOverheadLimit允许使用策略来限制在OutOfMemoryError引发异常之前JVM在GC上花费的时间比例。默认情况下,此选项处于启用状态,OutOfMemoryError如果将超过98%的总时间花在垃圾回收上并且回收的堆少于2%,则并行GC将抛出该选项。当堆很小时,此功能可用于防止应用程序长时间运行,几乎没有进展。要禁用此选项,请指定-XX:-UseGCOverheadLimit。-XX:+ UseNUMA通过增加应用程序对低延迟内存的使用,在具有非均匀内存架构(NUMA)的计算机上实现应用程序的性能优化。默认情况下,此选项被禁用,并且不会对NUMA进行优化。该选项仅在使用并行垃圾收集器时可用(-XX:+UseParallelGC)。-XX:+ UseParallelGC允许使用并行清除垃圾收集器(也称为吞吐量收集器),通过利用多个处理器来提高应用程序的性能。

默认情况下,禁用此选项,并根据计算机的配置和JVM的类型自动选择收集器。如果已启用,则会-XX:+UseParallelOldGC自动启用该选项,除非您明确禁用它。-XX:+ UseParallelOldGC允许将并行垃圾收集器用于完整的GC。默认情况下,禁用此选项。启用它会自动启用该-XX:+UseParallelGC选项。-XX:+ UseParNewGC允许在年轻一代中使用并行线程进行收集。默认情况下,禁用此选项。设置-XX:+UseConcMarkSweepGC选项时会自动启用它。使用-XX:+UseParNewGC不带选项-XX:+UseConcMarkSweepGC的选择是在JDK 8弃用。-XX:+ UseSerialGC允许使用串行垃圾收集器。对于不需要垃圾收集的任何特殊功能的小型和简单应用程序,这通常是最佳选择。默认情况下,禁用此选项,并根据计算机的配置和JVM的类型自动选择收集器。-XX:+ UseSHM在Linux上,使JVM能够使用共享内存来设置大页面。

有关更多信息,请参阅“大页面”。-XX:+ UseStringDeduplication启用字符串重复数据删除。默认情况下,禁用此选项。要使用此选项,必须启用垃圾优先(G1)垃圾收集器。请参阅-XX:+UseG1GC选项。

字符串重复数据删除String通过利用许多String对象相同的事实来减少Java堆上对象的内存占用。String相同的String对象可以指向并共享相同的字符数组,而不是每个对象指向其自己的字符数组。-XX:+ UseTLAB允许在年轻代空间中使用线程局部分配块(TLAB)。默认情况下启用此选项。要禁用TLAB,请指定-XX:-UseTLAB。