ArrayList的内存分配是如何工作的?

14 浏览
0 Comments

ArrayList的内存分配是如何工作的?

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

ArrayList list = new ArrayList(SIZE);

JVM为其保留了一块连续的内存空间。当我们向列表中添加新元素时,当元素数量达到SIZE的75%时,它会保留一块新的连续内存空间并复制所有元素。

我们的列表越来越大。我们不断添加新对象,列表必须重新构建。

现在会发生什么?

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

垃圾收集器可以尝试删除一些未使用的引用并整理内存。如果在此过程后JVM无法为列表的新实例保留空间,会发生什么?

它会使用最大可能的段创建一个新的列表吗?会抛出哪个异常?

我阅读了这个问题Java: How ArrayList manages memory和其中一个答案是:

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

0