堆内存大小
-
-Xms
:设定Java虚拟机初始堆内存大小,默认值由JVM自行决定。 -
-Xmx
:设定Java虚拟机最大堆内存大小。 -
-Xmn
:设置年轻代(Young Generation)的初始大小和最大大小。这个值通常作为整个堆的一部分来设置。 -
分配年轻代空间的比例(相对于整个堆):
-XX:NewRatio=
:设置年轻代与老年代(Old Generation)的比例。例如,如果设为3,则年轻代与老年代的大小比例为1:3。 -
Survivor空间的策略:
-XX:+UseAdaptiveSizePolicy
:启用自适应大小策略,JVM会根据应用的行为动态调整年轻代和其他内存区域的大小。 -
控制晋升至老年代的对象年龄阈值:
-
-XX:MaxTenuringThreshold=<value>
:设置对象从年轻代晋升到老年代的最大年龄(即经历多少次Minor GC)。默认值通常是由JVM决定的,也可以手动设置。
-
-
并发标记扫描(CMS)或Garbage First(G1)垃圾收集器特有的年轻代相关参数也会有所不同,但上述参数通常是通用的。
举例来说,配置年轻代占总堆大小的1/3且Survivor区与Eden区比为2:8的设置方式可能是:
-Xms1g -Xmx1g -Xmn300m -XX:SurvivorRatio=2
这将启动一个总堆大小为1GB的JVM实例,其中年轻代大小固定为300MB,
Survivor区和Eden区按两个Survivor区各占总年轻代大小的1/10,
Eden区占8/10进行划分。
元空间大小
-
-XX:MetaspaceSize
:元空间初始大小,在JDK1.8中替代了PermGen空间,用于存储类的元数据。 -
-XX:MaxMetaspaceSize
:元空间的最大大小。
垃圾收集器相关参数
-
-XX:+UseG1GC
:启用G1垃圾收集器。 -
-XX:+UseParallelGC
:启用并行垃圾收集器(年轻代)。 -
-XX:+UseConcMarkSweepGC
:启用CMS垃圾收集器(老年代)。 -
-XX:NewRatio
:年轻代与老年代的内存比例。 -
-XX:SurvivorRatio
:Eden区与Survivor区的比例。
垃圾收集行为控制
-
-XX:MaxTenuringThreshold
:对象晋升到老年代之前经历的垃圾回收次数阈值。 -
-XX:InitiatingHeapOccupancyPercent
(G1 GC):触发并发标记周期的堆占用率阈值。
内存区域细分(G1收集器特定)
-
-XX:G1HeapRegionSize
:设置G1堆区域的大小。
GC
-
-XX:+UseParallelGC
:启用并行新生代收集器,使用多个线程进行垃圾回收。 -
-XX:ParallelGCThreads
:设置并行收集器工作的线程数。 -
-Xloggc:filename
:指定GC日志文件路径。 -
-XX:+PrintGCDetails
:打印详细的GC处理信息。 -
-XX:+PrintGCDateStamps
:在GC日志中添加时间戳。 -
-XX:NumberOfGCLogFiles
和-XX:GCLogFileSize
:分别用于设置GC日志文件的数量和单个文件大小(滚动日志)。
栈内存大小
-
-Xss
:每个线程的栈内存大小。
直接内存大小
-
-XX:MaxDirectMemorySize
:设置可以使用的直接内存大小。
其他调优选项
-
-XX:+DisableExplicitGC
:禁止程序主动调用System.gc()。 -
-XX:+AggressiveOpts
:开启激进优化策略。 -
-XX:TargetSurvivorRatio
:G1 GC的目标幸存者区占用率。
监控工具:
jstat -gccause :查看实时GC统计信息,包括引起Full GC的原因。
jinfo:动态获取或修改运行中的Java进程的JVM参数。
jmap:生成堆转储快照,用于离线分析。
jconsole 或 VisualVM:图形化监控工具,可以实时观察GC活动。