JVM堆内存溢出问题,对于同一段代码只是打印了一下长度

求有智慧的大佬回答一下此问题
划重点,我问的是上面的代码为什么不OOM!!!

private static void testOldHeap2() {
        List<String> list = new ArrayList<String>();
        String s = "ssa";
        list.add(s);
        while(true){
            list.add(s);
            System.out.println(list.size());
        }

    }

此片段代码不会内存溢出,jdk版本1.8


private static void testOldHeap2() {
        List<String> list = new ArrayList<String>();
        String s = "ssa";
        list.add(s);
        while(true){
            System.out.println(list.size());
        }

    }

这段代码大概20s不到就会抛出内存溢出,很奇怪,我想不明白为什么
此为内存溢出截图

我这么给你说吧,做print打印的时候需要消耗时间,也就是假定list的size达到100w会溢出,那么打印花费时间需要60s,不打印需要0.5s,也就是你说的为什么没打印20s就溢出了。我们可以做个验证
图片说明,你把内存(-Xmx10m)设置小一点,很快就能验证我的说法。望采纳

while(true){
list.add(s);
}
死循环,还不明显,list里面一直放东西,还不撑爆了

图里面的代码和文本的代码不同
private static void testOldHeap2() {
        List<String> list = new ArrayList<String>();
        String s = "ssa";
        list.add(s); //这个在while外面,图里面溢出的在里面
        while(true){
            System.out.println(list.size());
        }

    }
加上
System.out.println(list.size());
其实也会溢出,但是会很久才溢出,因为输出是很慢的。