为什么无限对象创建不会抛出OutOfMemoryError?

为什么我没有使用以下代码获取OutOfMemoryError?

class OutOfMemoryErrorTest{

    public static void main(String[] args){
        Object obj;

        while(true){
            obj = new Object();
        }
    }}

我正在运行Java 8。



素胚勾勒不出你
浏览 483回答 3
3回答

猛跑小猪

每次循环后,obj将被标记为可收集,因此将被收集。    while(true){         Object obj = new Object(); //no further reference, so obj will be collected     }如果需要测试OOM,则应将obj的引用保存到LinkedList。    List refs = new LinkedList();     while (true) {         Object obj = new Object();         refs.add(obj);     }然后你会得到你想要的OOM。并且您可以使用较小的堆来更快地到达OOM。

阿晨1998

因为您没有保存对象引用,所以垃圾收集器删除创建的对象。如果你将这些对象添加到List,那么它将会发生。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java