Java OutOfMemoryError没有抛出

我试图在Java中研究不同的异常并遇到OutOfMemoryError,我想在工作中看到它,所以我编写了以下程序,通过在无限循环中创建它们来创建无限对象.该程序确实进入无限循环,它不会抛出OutOfMemoryError异常.
class Test {
    public static void main(String...args) {
        while(true) {
            Integer i = new Integer();
        }
    }
}

你走在正确的轨道上.你唯一缺少的是垃圾收集的概念.该程序实际上创建了无限的Integer对象,但在第一次迭代之后,在上一次迭代中创建的对象符合GC的条件.

考虑一下:

Integer i;    
i = new Integer(); // 1. create new object and make reference variable i refer to it.
i = new Integer(); // 2. create another object and make reference variable i refer to it...there is no way to get to the object created in step1 so obj in step 1 is eligible for GC.

如果你想看到OutOfMemoryError,你需要somhow确保有一种方法来获取在无限循环中创建的对象.所以你可以这样做:

class Test {
 public static void main(String...args) {
  Vector v = new Vector(); // create a new vector.
  while(true) {
   v.addElement(new Integer(1)); // create a new Integer and add it to vector.
  }
 }
}

在这个程序中,Integer对象像以前一样无限创建,但现在我将它们添加到向量中,因此请确保有一种方法可以获取它们并且它们不会成为GC符合条件的.

翻译自:https://stackoverflow.com/questions/2261465/java-outofmemoryerror-not-throwing

原文 

https://codeday.me/bug/20190113/527480.html

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » Java OutOfMemoryError没有抛出

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址