为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

素胚勾勒不出你 2019-04-26 18:15:44
为什么我没有使用以下代码获取OutOfMemoryError?class OutOfMemoryErrorTest{     public static void main(String[] args){         Object obj;         while(true){             obj = new Object();         }     }}我正在运行Java 8。
查看完整描述

3 回答

?
猛跑小猪

TA贡献1858条经验 获得超8个赞

每次循环后,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。


查看完整回答
反对 回复 2019-05-15
?
阿晨1998

TA贡献2037条经验 获得超6个赞

因为您没有保存对象引用,所以垃圾收集器删除创建的对象。如果你将这些对象添加到List,那么它将会发生。


查看完整回答
反对 回复 2019-05-15
  • 3 回答
  • 0 关注
  • 482 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信