gpt4 book ai didi

java - 为什么数组支持的 Java 集合对其容量施加任意限制?

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

问题:“java 中的最大数组长度是多少”已经被一遍又一遍地问过 - 这不是这个问题。正如许多答案所指出的,java.util 中的(某些)类定义了一个常量 MAX_ARRAY_SIZE = Integer.MAX_VALUE - 8。据我所知,JLS 中没有任何内容支持该限制,因此在我看来,这是“在某些 JVM 上进行实践验证并添加 50% 安全裕度”方法的结果。

因此,该限制不能保证对一个有效,并且由于其他对象和应急要求,即使调整了堆,用户也不能免受 OutOfMemoryError 的影响,这是两个。

我的问题是:为什么要引入该检查来抛出不同的异常,因为它不能保证在尝试将集合增长到超过那个大小时抛出这个和-这个异常的契约?如果调用者在某些情况下得到与其他情况不同的异常,这对调用者来说并没有什么区别 - 事实上,这有点烦人,因为知道分配的结构很大,可以捕获 OutOfMemoryError (是的,不是标准做法,但这么大的数组也不是标准的),而 IllegalStateException 相当模糊。

最佳答案

首先,我们可以捕获 RunTimeException

不加区别的OutOfMemoryException确实会产生超出内存限制的直观关联。 “When OutOfMemoryException”增加jvm内存选项。

然而,IllegalStateException 指出了概念上的错误。

  1. 最好能指出原因。
  2. 错误在于允许收集如此多的元素。 “不要在 map 中存储房屋地址。”
  3. 增加内存并不能解决数组大小有限的问题。事实上,任何其他异常都会产生误导,例如 OutOfMemory、IndexOutOfBounds。
  4. OutOfMemoryException 可能是由无休止的递归和其他原因引起的,理论上只是碰巧被扔进一个集合中。
  5. 堆栈跟踪有时不可用。

关于java - 为什么数组支持的 Java 集合对其容量施加任意限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56090725/

24 4 0
文章推荐: angularjs - Google Chrome HTML