当我们使用新的ArrayList()时,是否连续分配内存?
如果我们调用list.add(e)十次,那么所有元素都将按添加顺序连续存储在内存中,还是随机存储在内存中?
谢谢。
最佳答案
首先,您需要了解ArrayList的工作方式。它将“引用”或“指针”存储到内部对象数组elementData
中的实际存储中。这种引用数组很可能是连续的,但特定于JVM。被添加的实际对象存储在堆中,尽管这是特定于JVM的,但几乎可以肯定不会是连续的。
elementData[0] ===> object 1
elementData[1] ===> object 2
elementData[2] ===> object 3
...
次要的,您提到多次调用add()...当ArrayList内部elementData不再足够大时,它将其大小调整为一个更大的+ 50%IIRC,并将所有引用复制到新的elementData中,实际对象不会移动...
最后,连续内存通常是高性能本机应用程序的关注点。在Java中,内存是由JVM管理的,并且是从底层OS借用的,依次是从硬件甚至是虚拟化的硬件借来的。