JDK 内存配置主要通过 JVM 启动参数调整堆内存、非堆内存等核心区域,常用参数及配置示例如下:
- 堆内存核心参数
◦ -Xms:堆内存初始大小,建议与 -Xmx 设为相同值避免运行时动态扩容,如 -Xms2g
◦ -Xmx:堆内存最大上限,如 -Xmx4g
◦ -Xmn:新生代内存大小,通常设为堆内存的 1/3~1/2,如 -Xmn1g
◦ -XX:SurvivorRatio:新生代中 Eden 区与 Survivor 区的比例,默认 8(即 Eden:S0:S1 = 8:1:1),如 -XX:SurvivorRatio=6
- 非堆内存参数
◦ -XX:PermSize(JDK 7及以前)/ -XX:MetaspaceSize(JDK 8及以后):方法区初始大小,如 -XX:MetaspaceSize=256m
◦ -XX:MaxPermSize(JDK 7及以前)/ -XX:MaxMetaspaceSize(JDK 8及以后):方法区最大大小,如 -XX:MaxMetaspaceSize=512m
- 直接内存参数
◦ -XX:MaxDirectMemorySize:设置直接内存上限,未指定时默认与 -Xmx 相同,如 -XX:MaxDirectMemorySize=1g
- 配置示例(Java 8+ 生产环境)
java -Xms2g -Xmx4g -Xmn1g -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -jar your-app.jar
- 配置原则
◦ 堆内存总大小不超过物理内存的 1/2,避免系统频繁换页;
◦ 新生代占比过高会减少老年代空间,易引发老年代 GC;占比过低会增加 Minor GC 频率;
◦ 方法区大小需根据项目依赖包数量调整,避免出现 Metaspace OutOfMemoryError。