为什么代码
while(true)
new Object();
Run Code Online (Sandbox Code Playgroud)
不会导致OutOfMemoryException?
kos*_*osa 10
因为一旦完成每个循环迭代,该对象就有资格获得GC(因此,HEAP不会被填充).当JVM需要更多内存时,它可以清理符合条件的对象.
我建议阅读关于垃圾收集的真相(我不能在这里发布链接,因为它有IP,只是google它).
您没有将新Object分配给任何持久变量,因此您不会耗尽内存,因为Java虚拟机会在您有可能耗尽内存之前对每个Object进行垃圾收集.
另一方面,如果你说
List<Object> xs = new LinkedList<Object>();
while (true) {
xs.add(new Object());
}
Run Code Online (Sandbox Code Playgroud)
然后他们不会自动收集垃圾,你最终会耗尽内存.
归档时间: |
|
查看次数: |
217 次 |
最近记录: |