垃圾收集器选择
下面是一个表格,总结了不同垃圾收集器选择的命令行选项与对应的垃圾收集器:
命令行选项 | 选中的垃圾收集器 |
---|---|
-XX:+UseSerialGC | 串行收集器 |
-XX:+UseParallelGC | 并行收集器 |
-XX:+UseParallelOldGC | 并行压缩收集器 |
-XX:+UseConcMarkSweepGC | 并发标记扫描(CMS)收集器 |
垃圾收集器选择说明:
- 串行收集器:使用单线程进行垃圾收集,适用于单核处理器或对暂停时间要求不高的场景。
- 并行收集器:在年轻代使用多线程进行垃圾收集,适用于多核处理器,可以提高收集的吞吐量。
- 并行压缩收集器:是并行收集器的老年代版本,使用多线程并进行压缩,减少内存碎片。
- 并发标记扫描(CMS)收集器:在垃圾收集过程中与应用程序并发执行,适用于对暂停时间要求高的应用,但可能会产生内存碎片。
通过指定这些命令行选项,可以明确选择适合应用程序需求的垃圾收集器,从而优化应用的性能表现。
垃圾收集器统计
下面是一个表格,总结了不同垃圾收集器统计信息相关的命令行选项及其描述:
命令行选项 | 描述 |
---|---|
-XX:+PrintGC | 在每次垃圾收集时输出基本信息。 |
-XX:+PrintGCDetails | 在每次垃圾收集时输出更详细的信息。 |
-XX:+PrintGCTimeStamps | 在每次垃圾收集事件开始时输出时间戳。与-XX:+PrintGC 或-XX:+PrintGCDetails 结合使用,以显示每次垃圾收集的开始时间。 |
垃圾收集器统计信息说明:
-
-XX:+PrintGC
:这个选项启用了垃圾收集的基本日志记录,包括每次垃圾收集发生时的简短消息。这对于那些想要快速了解垃圾收集活动的应用来说是很有用的。 -
-XX:+PrintGCDetails
:这个选项提供了更详细的垃圾收集日志,包括每一代的回收情况、回收所花费的时间、以及堆的使用情况等。这对于需要深入了解垃圾收集行为的用户来说非常有用。 -
-XX:+PrintGCTimeStamps
:这个选项会打印出每次垃圾收集开始时的时间戳,通常与-XX:+PrintGC
或-XX:+PrintGCDetails
选项一起使用,以便于分析垃圾收集的时间点和持续时间。
这些选项可以帮助开发者和系统管理员更好地监控和调优Java应用程序的垃圾收集行为。
堆大小配置
下面是一个表格,总结了Java虚拟机堆和代大小相关的命令行选项及其默认值和描述:
命令行选项 | 默认值 | 描述 |
---|---|---|
-Xms<n> | 4MB | 堆的初始大小(字节)。 |
-Xmx<n> | 64MB | 堆的最大大小(字节)。 |
-XX:MinHeapFreeRatio=<minimum> | 40% | 指定堆空间最小空闲比例的目标范围。每代应用此设置。 |
-XX:MaxHeapFreeRatio=<maximum> | 70% | 如果某代的空闲空间百分比低于minimum ,则扩大该代的大小,以使空闲空间占30%。如果空闲空间百分比超过maximum ,则缩小该代的大小,以使空闲空间占60%。 |
-XX:NewSize=<n> | 平台相关 | 新生代(年轻代)的初始大小(字节)。 |
-XX:NewRatio=<n> | 客户端JVM为2,服务器JVM为8 | 年轻代与老年代之间的比例。例如,如果n 是3,则比例为1:3,伊甸园和幸存者空间的总大小是年轻代和老年代总大小的四分之一。 |
-XX:SurvivorRatio=<n> | 32 | 每个幸存者空间与伊甸园之间的比例。例如,如果n 是7,则每个幸存者空间是年轻代的九分之一(而不是八分之一,因为有两块幸存者空间)。 |
-XX:MaxPermSize=<n> | 平台相关 | 永久代的最大大小。 |
堆和代大小说明:
-
初始和最大堆大小 (
-Xms<n>
,-Xmx<n>
):这两个选项允许你设置JVM初始和最大堆内存。这些设置对于控制JVM使用的内存量至关重要,特别是在长时间运行的应用或那些需要大量内存的处理过程中。 -
堆空间空闲比例 (
-XX:MinHeapFreeRatio
,-XX:MaxHeapFreeRatio
):通过设置最小和最大空闲比例,JVM可以自动调整堆的大小,以适应当前内存使用情况,从而优化垃圾收集和内存使用效率。 -
年轻代和老年代大小比例 (
-XX:NewRatio
):设置年轻代和老年代之间的相对大小。这对于调优垃圾收集器非常有用,因为不同代的对象生命周期不同,可能需要不同的垃圾收集策略。 -
幸存者空间比例 (
-XX:SurvivorRatio
):幸存者空间用于存放每次垃圾收集后仍然存活的对象。通过调整幸存者空间与伊甸园的比例,可以优化年轻代的垃圾收集。 -
永久代大小 (
-XX:MaxPermSize
):永久代主要用于存储类的元数据信息。虽然在Java 8及更高版本中,永久代已被元空间取代,但在早期版本中,这个设置对于避免永久代溢出错误非常重要。
这些设置允许开发者和系统管理员根据应用的具体需求和性能目标,精细地控制JVM的内存分配和垃圾收集行为。
并行和并行压缩收集器配置
下面是一个表格,总结了并行收集器和并行压缩收集器的相关选项、默认值和描述:
命令行选项 | 默认值 | 描述 |
---|---|---|
-XX:ParallelGCThreads=n | CPU数 | 设置垃圾收集器的线程数。 |
-XX:MaxGCPauseMillis=n | 无默认值 | 指示收集器希望暂停时间不超过n毫秒。 |
-XX:GCTimeRatio=n | 99 | 设置一个目标,使得总时间的1/(1+n)部分用于垃圾收集。这意味着垃圾收集时间与应用时间的比率为1:99。 |
并行和并行压缩收集器选项说明:
-
-XX:ParallelGCThreads=n
:这个选项允许你设置并行收集器使用的线程数。通常,这个值设置为系统的CPU数量或核心数量,以充分利用系统资源,提高垃圾收集的效率。 -
-XX:MaxGCPauseMillis=n
:这个选项用于设置最大暂停时间目标。并行收集器会尽量确保每次垃圾收集的暂停时间不超过设定的值。这对于那些对暂停时间敏感的应用非常重要,因为它可以保证应用的响应时间。 -
-XX:GCTimeRatio=n
:通过这个选项,你可以设置一个目标,使得应用程序在垃圾收集上花费的时间占总运行时间的比例尽可能小。例如,如果设置为99,则意味着垃圾收集时间不超过总运行时间的1%。
这些选项允许开发者和系统管理员根据应用的具体需求和性能目标,精细地控制并行和并行压缩收集器的行为,从而优化应用的性能和响应时间。
CMS收集器配置
下面是一个表格,总结了CMS收集器的相关选项、默认值和描述:
命令行选项 | 默认值 | 描述 |
---|---|---|
-XX:+CMSIncrementalMode | 禁用 | 启用一种模式,在这种模式下,并发阶段是增量进行的,周期性地停止并发阶段以将处理器归还给应用程序。 |
-XX:+CMSIncrementalPacing | 禁用 | 启用自动控制CMS收集器在放弃处理器之前允许执行的工作量,基于应用程序行为。 |
-XX:ParallelGCThreads=n | CPU数 | 设置并行年轻代收集和老年代收集的并行部分所使用的垃圾收集线程数。 |
CMS收集器选项说明:
-
-XX:+CMSIncrementalMode
:这个选项启用了CMS收集器的一种特殊模式,称为增量模式。在这个模式下,CMS的并发阶段将被分成多个小步骤执行,每次执行完一小部分工作后,CMS会暂停并将CPU控制权交还给应用程序。这有助于减少长时间GC对应用的影响。 -
-XX:+CMSIncrementalPacing
:此选项与增量模式配合使用,它根据应用程序的行为自动调整CMS在放弃CPU之前可以完成的工作量。这有助于进一步优化GC对应用的影响,确保应用在高负载时仍能获得足够的CPU资源。 -
-XX:ParallelGCThreads=n
:虽然这个选项也适用于并行收集器,但在使用CMS时,它用于确定并行年轻代收集(如果使用-XX:+UseParallelGC
)以及老年代收集的并行部分所使用的线程数。正确的线程数可以提升收集效率,减少垃圾收集对应用的影响。
这些选项允许开发者和系统管理员根据应用的具体需求和性能目标,精细地控制CMS收集器的行为,从而优化应用的性能和响应时间。