1、Young GC
1.1、代码
public class TestYGC {
/**
设置参数
-Xms10m 初始化堆内存大小
-Xmx20m 堆最大内存
-Xmn5m 年轻代的大小
-XX:+PrintGCDetails 打印gc明细日志
**/
public static void main(String[] args) {
List<Object> list = new ArrayList<>();
for (int i = 0; i < 4; i++) {
byte[] b = new byte[1 * 1024 * 1024];
list.add(b);
}
}
}
1.2、修改参数
设置jvm参数
-Xms10m 初始化堆内存大小
-Xmx20m 堆最大内存
-Xmn5m 新生代的大小
-XX:+PrintGCDetails 打印gc明细日志
触发Young GC参数设置解释:
- JVM中新生代分为 Eden、From、To,三者内存占有比例默认为8:1:1。
- 上方设置新生代内存为5m,再按照比例分配,则Eden默认为4m
- 所以想触发Young GC,则把Eden内存占满即可
1.3、运行查看
解读:
[GC (Allocation Failure) [PSYoungGen: 4061K->488K(4608K)] 4061K->2848K(9728K), 0.0035678 secs] [Times: user=0.03 sys=0.00, real=0.00 secs]
[GC (分配失败) [年轻代:回收前大小->回收后大小(年轻代总大小)] 回收前堆大小->回收后堆大小(整个堆大小), 回收耗时] [Times: 用户耗时 系统耗时 实际耗时]
2、Full GC
2.1、代码
public class TestFullGC {
/**
设置参数
-Xms10m 初始化堆内存大小
-XX:+PrintGCDetails 打印gc明细日志
-Xms10m -XX:+PrintGCDetails
新生代占堆内存的1/3
老年代占堆内存的2/3
**/
public static void main(String[] args) {
List<Object> list = new ArrayList<>();
for (int i = 0; i < 8; i++) {
byte[] b = new byte[1 * 1024 * 1024];
list.add(b);
}
}
}
2.2、修改参数
设置jvm参数
-Xms10m 初始化堆内存大小
-XX:+PrintGCDetails 打印gc明细日志
触发FULL GC参数设置解释:
- JVM中新生代占堆内存的1/3,老年代占堆内存的2/3
- 上方设置堆内存为10m,再按照比例分配,所以想触发FULL GC,则把老年代内存占满即可