通用配置
- -XX:+DisableExplicitGC 禁用程序中手动调用GC
- 调试时打开 -XX:+PrintClassHistogram-XX:+PrintGCDetails-XX:+PrintGCTimeStamps -XX:+PrintCommandLineFlags
- -XX:+HeapDumpOnOutOfMemoryError 打印oom error -XX:HeapDumpPath 设置导出堆的存放路径 , 发生OOM时将dump文件导出以便分析。
- -XX:+HeapDumpBeforeFullGC 打印fullGC日志 -XX:HeapDumpPath= 指定fullgc日志路径
堆内存配置
- -Xms: 初始堆内存大小
- -Xmx: 最大堆内存大小
- -XX:NewRatio 老年代与新生代的比例
- -XX:SurvivorRatio: eden区与survivor区的比例
- -Xmn: 指定新生代的大小
例:
-Xms10m -Xmx10m -Xmn4m -XX:SurvivorRatio=8
堆内存初始为10m,最大10m,新生代4m,老年代便是(10-4)m;eden区与survivor区比例为8,eden区便是3.2m,两个survivor区大小都是0.4m。
-Xms10m -Xmx10m -XX:NewRatio=3 -XX:SurvivorRatio=8
堆内存初始为10m,最大10m,老年代大小是新生代三倍,老年代7.5m,新生代2.5m。
栈内存配置
- -Xss : 规定栈内存大小, 决定栈最大可调用深度。 -Xss1m
老年代配置
- -XX:MaxTenuringThreshold 经过多少次GC后进入老年代。
-
-XX:PretenureSizeThreshold 达到多大的对象会被直接存入老年代。
-XX:MaxTenuringThreshold=15 -XX:PretenureSizeThreshold=1024
超过1m的对象直接进入老年代,经过15次gc的进入老年代。
需要注意TLAB区域,JVM默认是打开TLAB的,当对象较大不能进入TLAB时才会被分配到堆上,才可能被分配到老年代。
TLAB配置
-
-XX:+UseTLAB 启用TLAB,默认是开启的。
-
-XX:-UseTLAB 禁用TLAB,对象直接进入堆空间。
-
-XX:+TLABSize TLAB空间初始大小
-
-XX:TLABRefillWasteFraction 设置能进入TLAB空间对象的大小,默认为64。表示对象大小大于TLAB空间1/64时,不能进入TLAB。
-
-XX:+PrintTLAB 打印tlab信息, 要与 -XX:DoEscapeAnalysis一起使用。
-
-XX:+ResizeTLAB 自调整TLABRefillWasteFraction 阀值以及TLAB的大小。 关闭后TLAB需要自己设置大小。
方法区配
方法区以前也会被称作永久代,jdk1.8后改为了元空间(Metaspace)的存储空间。Metaspace使用的是本地内存,而不是堆内存。默认情况下元空间与本地内存有关。
- -XX:MetaspaceSize=N 元空间初始大小
- -XX:MaxMetaspaceSize=N 元空间最大大小