gpt4 book ai didi

java - 为什么 ensureCapacity 不会抛出 OutOfMemoryError

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:11:38 28 4
gpt4 key购买 nike

我在阅读 java 文档时发现了这个函数:ensureCapacity(int minCapacity)

我想知道的是它不会抛出 OutOfMemoryError。任何人都可以建议为什么任何人都可以将数字大于机器内存。

链接:相关java docs

P.S.:如果我太天真了,请多多包涵。

最佳答案

为什么文档中没有提到?

请注意整个Error Throwable 类不必在文档中明确提及。 RuntimeException 也是如此。只有检查过的Exceptions 必须出现在文档中,例如IOException

据我所知,Error 类背后的一般思想是,它们表示几乎随时可能发生并且很难从中恢复的情况。在所有可能的类和方法中提及这些是没有意义的。

被抛出的证明

import java.util.ArrayList;

public class OOMETest {
public static void main(String[] args)
{
ArrayList<ArrayList<Object>> listOfLists = new ArrayList<ArrayList<Object>> ();
listOfLists.ensureCapacity(Integer.MAX_VALUE);
while (true) {
ArrayList<Object> list = new ArrayList<Object>();
list.ensureCapacity(Integer.MAX_VALUE);
listOfLists.add(list);
}
}
}

和堆栈跟踪

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2760)
at java.util.Arrays.copyOf(Arrays.java:2734)
at java.util.ArrayList.ensureCapacity(ArrayList.java:167)
at OOMETest.main(OOMETest.java:9)

是否应该捕获错误

我跑题了,因为我读到了这个问题的另一个答案。有人说“你不应该试图捕捉或处理它”。

虽然从这种情况中恢复实际上是不可能的,但一个错误可能值得捕捉,只是为了生成一个适当的调试条目或尝试关闭文件、流、连接、保存未保存的资源等。

关于java - 为什么 ensureCapacity 不会抛出 OutOfMemoryError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18657551/

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