当我们使用new ArrayList()
内存是连续分配的吗?
如果我们打电话list.add(e)
10次,所有元素是按add顺序连续存储在内存中,还是随机存储在内存中?
首先,您需要了解 ArrayList 的工作原理。它将“引用”或“指针”存储到内部对象数组中的实际存储elementData
。该引用数组很可能是连续的,但是是 JVM 特定的。实际添加的对象存储在堆上,并且几乎肯定不会是连续的,尽管这是 JVM 特定的。
elementData[0] ===> object 1
elementData[1] ===> object 2
elementData[2] ===> object 3
...
其次,您提到多次调用 add()...当 ArrayList 内部 elementData 不再足够大时,它将其大小调整为更大的大小,+50% IIRC,并复制所有参考对于新的 elementData,实际对象不会移动。
最后,连续内存通常是高性能本机应用程序关注的问题。在 Java 中,内存由 JVM 管理,并从底层操作系统借用,进而从硬件甚至虚拟化硬件借用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)