1、-Xmx
设置初始分配大小,默认为物理内存的"1/64"
2、-Xmx
最大分配内存,默认为物理内存的"1/4"
3、-XX:+PrintGCDetails
输出详细的GC处理日志
查看自己电脑默认配置大小
生成环境最大值和最小值必须设置一样。不然系统内存忽高忽低,系统产生停顿
4、idea设置堆内存的最大值和最小值一样
-Xms1024m -Xmx1024m -XX:+PrintGCDetails
5、查看JVM内存分配结构
(PSYoungGen+ParOldGen)/1024=堆内存
JDK1.8之后:Metaspace:元空间
JDK1.7之前:PSPermGen:永久代
6、代码报错OOM
设置JVM大小
报错:Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
7、GC日志分析
[GC (Allocation Failure) :分配失败产生GC
[PSYoungGen: 3994K->486K(4608K)] 3994K->917K(15872K), 0.0006858 secs]
[Times: user=0.00 sys=0.00, real=0.00 secs]
3994K:GC之前的大小
486K:GC之后的大小
4608K:新生代总共大小
3994K:GC之前老年代的大小
917K:GC之后老年代的大小
15872K:堆的总大小
0.0006858 secs:GC耗时时间
user=0.00:用时
sys=0.00:系统用时
real=0.00:时间耗时
[Full GC (Ergonomics)
[PSYoungGen: 384K->0K(4608K)]
[ParOldGen: 9439K->2145K(11264K)] 9823K->2145K(15872K),
[Metaspace: 3114K->3114K(1056768K)], 0.0020655 secs]
[Times: user=0.00 sys=0.00, real=0.00 secs]
规律:
名称:GC前内存占用->GC后内存占用(该区内存总大小)
GC在新生区,FULL GC在堆(新生区+老年区)