目录

ThasBlog

学无止境

Jvm GC 示例代码

jvm参数:

-Xms1000m
-Xmx1000m
-XX:NewRatio=9
-XX:SurvivorRatio=8
-XX:-UseParNewGC
-XX:-UseConcMarkSweepGC
-XX:+UseSerialGC
-XX:+PrintGC
-XX:+PrintGCDetails
-XX:-UseTLAB

java代码:

public class Main {
    static Object[] bs = new Object[500];
    public static void main(String[] args) throws Exception {
        //预留时间连接console
        Thread.sleep(20000);
        // 消除程序初始化的影响
        System.gc();
        for (int i = 0; i < bs.length; i++) {
            // 分配1mb
            //建立强引用
            bs[i] =new byte[1024*1024];
            Thread.sleep(200);
        }
        System.gc();
        Thread.sleep(10000);
    }
}

当Eden区满, 未回收的对象进入Suvivor区, 放不下的进入老年代, Eden区此时为空
survivor区的新对象记为1,
下一次Eden满, 如果老年代不足以容纳垃圾对象, 则会发生担保失败的问题, Eden区的对象无法进入老年代, Eden区只能清理一部分,
如果老年代可以容纳, Suvivor区的老对象被记为2, 由于标记为2的对象超过一半, 这部分对象放入老年代, 同时晋升年龄提升为2, Survivor放不下的也会直接进入老年代.


标题:Jvm GC 示例代码
作者:thas
地址:https://thas.cc/articles/2020/12/03/1607007619349.html