据我所知,当我们创建一个时ArrayList:
ArrayList
ArrayList<String> list = new ArrayList<String>(SIZE);
JVM为此保留了内存的连续部分。当我们将新元素添加到列表中时,当元素数量达到75%时,SIZE它将保留新的连续内存部分并复制所有元素。
SIZE
我们的名单越来越大。我们正在添加新对象,并且必须再次重建列表。
现在会发生什么?
JVM正在寻找连续的内存段,但是找不到足够的空间。
垃圾收集器可以尝试删除一些未使用的引用和碎片整理内存。如果JVM在此过程之后无法为列表的新实例保留空间,该怎么办?
是否使用最大可能的细分创建一个新的细分?哪个Exception会抛出?
Exception
引用不会占用太多空间。但无论如何,都会占用一些空间。当数组变大时,可能会出现问题。我们也不能忘记,我们还有其他使用内存空间的东西。
如果JVM无法分配请求的内存量,它将抛出
OutOfMemoryError
而已。实际上,JVM内存分配只有两种可能的结果:
没有中间选项,例如分配了 一些内存 。
它与 ArrayList 无关,这是JVM问题。如果您问 ArrayList 是否以某种特殊的方式来管理这种情况-答案是“不,不是。” 它只是尝试分配所需的内存量,然后让JVM考虑其余部分。