触发Young GC、Full GC的Demo
文章目录
- 1、Young GC
- 1.1、代码
- 1.2、修改参数
- 1.3、运行查看
- 2、Full GC
- 2.1、代码
- 2.2、修改参数
- 2.3、运行查看
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,则把老年代内存占满即可
2.3、运行查看
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!