我正在尝试使用以下代码重现 OutOfMemoryError
:
List<Object> objects = new LinkedList<>();
while (true)
objects.add(new Object());
}
但实际上从来没有发生过,我使用了-Xmx512,JVM每次只需要大约497 MB,然后内存就不会被消耗。
我使用的是jdk1.8.0_151
谁能帮我弄清楚为什么没有抛出错误?
最佳答案
您没有收到java.lang.OutOfMemoryError
,因为您正在创建非常小的对象(new Object()
),并且您指定的堆大小非常大。如果您想看到 OOM,那么:
- 您使用小对象
new Object()
+ 小堆大小,例如Xmx64
- 您创建了一些重对象,例如 Calendar (
objects.add(Calendar.getInstance());
) +Xmx512
使用new Object()
+ Xmx512
,你将不得不等待很长时间才能获得OOM。
关于您无法访问的代码错误,我认为您已经发现您遇到了括号问题,如果您确实像下面那样那么您将不会得到该编译错误,但是如果您在 WHILE 循环之后放置任何语句,那么您将得到那个错误。
while (true){
objects.add(Calendar.getInstance());
System.out.println(objects);
}
关于java - 为什么 OutOfMemoryError 不能用对象集合重现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49095997/