内存溢出时,finally会继续执行,finally中new 对象还能成功?

public static void main(String[] args){
List list = new ArrayList();
try{
while(true){
list.add(new OutOfMemory("try"));
}
}catch(Exception e){
System.out.println(e);
}finally {
System.out.println("finally");
OutOfMemory o = new OutOfMemory("finally o");

        System.out.println(o.test);
        System.out.println(list.size());
        System.out.println(o.test);
    }
}

执行结果:
finally
finally o
106710
finally o
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:3210)
at java.util.Arrays.copyOf(Arrays.java:3181)
at java.util.ArrayList.grow(ArrayList.java:265)
at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:239)
at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:231)
at java.util.ArrayList.add(ArrayList.java:462)
at main.java.com.liqiangx.memory.OutOfMemory.main(OutOfMemory.java:18)

finally一定会执行的。
可以通过下面方法实时获取堆内存。

// 获取MemoryMXBean
MemoryMXBean memoryMXBean = ManagementFactory.getMemoryMXBean();
// 打印:堆内存使用
logger.info("heapMemoryUsage: {}", memoryMXBean.getHeapMemoryUsage().toString());
// 打印:非堆内存使用
logger.info("nonHeapMemoryUsage: {}", memoryMXBean.getNonHeapMemoryUsage().toString());

list 超出限定长度了而已,并不是说内存真的一点不剩了

你可以在finally里再多写几个new试试。