数组列表的内存是连续分配的吗?

问题描述 投票:0回答:1

当我们使用

new ArrayList()
时,内存是连续分配的吗? 如果我们调用
list.add(e)
10 次,所有元素会按添加顺序连续存储在内存中,还是随机存储在内存中?

java arraylist memory-management contiguous
1个回答
4
投票

首先你需要了解ArrayList是如何工作的。它将实际存储的“引用”或“指针”存储在内部对象数组

elementData
中。该引用数组很可能是连续的,但是是 JVM 特定的。实际添加的对象存储在堆上,并且几乎肯定不会是连续的,尽管这是 JVM 特定的。

elementData[0] ===> object 1
elementData[1] ===> object 2
elementData[2] ===> object 3
...

其次,你提到多次调用 add()...当 ArrayList 内部 elementData 不再足够大时,它会将其调整为更大的大小,+50% IIRC,并将所有 references 复制到新的 elementData,实际的物体不动...

最后,连续内存通常是高性能本机应用程序关注的问题。在 Java 中,内存由 JVM 管理,并从底层操作系统借用,进而从硬件甚至虚拟化硬件借用......

© www.soinside.com 2019 - 2024. All rights reserved.