小编典典

ArrayList的内存分配如何工作?

java

据我所知,当我们创建一个时ArrayList

ArrayList<String> list = new ArrayList<String>(SIZE);

JVM为此保留了内存的连续部分。当我们将新元素添加到列表中时,当元素数量达到75%时,SIZE它将保留新的连续内存部分并复制所有元素。

我们的名单越来越大。我们正在添加新对象,并且必须再次重建列表。

现在会发生什么?

JVM正在寻找连续的内存段,但是找不到足够的空间。

垃圾收集器可以尝试删除一些未使用的引用和碎片整理内存。如果JVM在此过程之后无法为列表的新实例保留空间,该怎么办?

是否使用最大可能的细分创建一个新的细分?哪个Exception会抛出?

引用不会占用太多空间。但无论如何,都会占用一些空间。当数组变大时,可能会出现问题。我们也不能忘记,我们还有其他使用内存空间的东西。


阅读 387

收藏
2020-12-03

共1个答案

小编典典

如果JVM无法分配请求的内存量,它将抛出

OutOfMemoryError

而已。实际上,JVM内存分配只有两种可能的结果:

  1. 应用程序已获得请求的内存量。
  2. JVM抛出OutOfMemoryError。

没有中间选项,例如分配了 一些内存

它与 ArrayList 无关,这是JVM问题。如果您问 ArrayList 是否以某种特殊的方式来管理这种情况-答案是“不,不是。”
它只是尝试分配所需的内存量,然后让JVM考虑其余部分。

2020-12-03