gpt4 book ai didi

java - 为什么当我放大 xms 和 xmx 参数时没有抛出 OOM

转载 作者:太空宇宙 更新时间:2023-11-04 14:50:04 24 4
gpt4 key购买 nike

下面是用于模拟抛出 OOM 的情况的代码:

public class OOMTest {
public static void main(String[] args) {
heapOOM();
}

public static void heapOOM() {
List<Object> list = new ArrayList<Object>();
while(true) {
list.add(new Object());
}
}
}

当我应用如下参数时,其中 xmxxms 低于 18M,它工作得很好,并且会抛出 OOM:

-Xms18M -Xmx18M -XX:+HeapDumpOnOutOfMemoryError

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

但是当xmxxms大于19M时,项目会不停地运行,任务管理器中内存波动在39MB左右。

有人可以告诉我为什么会发生这种现象吗?非常感谢!

P.S. 当我将 new Object() 更改为 new String("test")new Long(2),它工作得很好。为什么?

最佳答案

您可以尝试检查它是否生成相同的引用。一种检查方法是实例化一个集合并将 ArrayList 添加到集合中。发帖说你可以数一数。如果由于某种原因 jvm 没有创建新实例,则集合和列表的大小将会有所不同。值得检查一下以了解是否在循环中创建了新实例。我使用 java 1.7 尝试了同样的操作,并得到了 Outofmemory 异常。

关于java - 为什么当我放大 xms 和 xmx 参数时没有抛出 OOM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23902076/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com