触发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、运行查看

在这里插入图片描述


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部