当我们使用new ArrayList()时是连续分配内存吗? 如果我们调用list.add(e)10次,所有元素是否会通过添加顺序连续存储在内存中,还是随机存储在内存中?
感谢。
答案 0 :(得分:3)
首先,您需要了解ArrayList的工作原理。它将“引用”或“指针”存储到内部对象数组elementData
中的实际存储中。这个引用数组可能是连续的,但是特定于JVM。添加的实际对象存储在堆上,几乎肯定不会是连续的,尽管这是特定于JVM的。
elementData[0] ===> object 1
elementData[1] ===> object 2
elementData[2] ===> object 3
...
辅助,你提到多次调用add()...当ArrayList内部elementData不再足够大时,它会将它调整为更大的一个,+ 50%IIRC,并复制所有引用对于新的elementData,实际的对象不会移动......
最后,连续内存通常是高性能本机应用程序的一个问题。在Java中,内存由JVM管理,并从底层操作系统借用硬件甚至虚拟化硬件...