Java - Integer []和int []内存的区别

时间:2014-08-21 10:18:05

标签: java arrays

我试图大致了解Integer数组和int数组之间的内存成本差异。虽然关于原始int和Integer对象之间的差异似乎有很多信息,但我仍然对如何计算int []和Integer []数组的内存成本感到困惑(开销成本) ,填充等)。

任何帮助将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:8)

除了存储数组的长度外,int的数组需要N个4字节元素的空间,而Integer的数组需要N个引用的空间,其大小为平台相关的;通常,这将是32位平台上的4个字节或64位平台上的8个字节。

int[]而言,存储数据不需要额外的内存。另一方面,Integer[]需要Integer类型的对象,这些对象可以是全部不同的或共享的(例如,通过Java平台本身实现的小数字的实习)。因此,Integer[]最多需要N个对象,每个对象包含一个4字节int

假设Integer数组中的所有Integer[]都是不同的对象,则数组及其内容将占用int[]数组空间的两到三倍。另一方面,如果共享所有对象,并且考虑了共享对象的内存成本,则根本不存在额外的开销(在32位平台上)或者在64位平台上会有2倍的开销

答案 1 :(得分:0)

Here 是jdk6u26与1024 Integer s数组大小的比较,而不是1024 int s。请注意,对于包含低数Integer[]的{​​{1}}数组,可以通过自动框缓存与JVM中这些Integer的其他用途共享这些数据。