分配数组与在Java中分配链表时使用了多少内存?

new*_*gic 2 java memory arrays linked-list

我的猜测是它存储在阵列中的每个值的32位/ 64位字(取决于CPU).所以它的数组大小为X 32位/ 64位.

在链表的情况下,存储指向下一个元素的引用将是两倍.所以它将是2*数组大小X 32位/ 64位.

这是对的吗,我错过了什么吗?

Fla*_*vio 6

多得多.链表中的每个元素都具有:

  • 指向下一个元素的指针,指向前一个元素的指针,指向项目值的指针(12个字节)+对象开销(大约另外12个字节).说24个字节.
  • 每个元素都不是原始的,而是包装器.如果每个元素都不同,它将占用空间.对于整数说另外16个字节.

总计:每个元素40个字节.

不要把它当作面子,只是为了给你一个想法.如果你想要精确的数字启动一个内存分析工具(例如Eclipse MAT).

  • 我的意思是每个列表条目本身都是一个单独的对象 这与用于"盒子"原语的对象无关 - 这仍然是额外的开销. (2认同)