java中的一组int作为32位值的块存储在内存中.如何存储整数对象数组?即
int[] vs. Integer[]
Run Code Online (Sandbox Code Playgroud)
我想,Integer数组中的每个元素都是对Integer对象的引用,并且Integer对象具有对象存储开销,就像任何其他对象一样.
但是我希望JVM能够在整个引擎中做一些神奇的聪明才智,因为整数是不可变的并且存储它就像一组int.
我的希望是天真的吗?在每个最后一盎司性能都很重要的应用程序中,Integer数组是否比int数组慢得多?
ral*_*lfs 12
我知道没有VM会存储一个类似int []数组的Integer []数组,原因如下:
考虑到所有这些因素,它很可能是可能使一个特殊的整数节省相比于一些空间[] 天真的实现,但额外的复杂性可能会影响到很多其他的代码,使得它到底慢.
使用Integer []而不是int []的开销在空间和时间上都可以很大.在典型的32位VM上,Integer对象将消耗16个字节(对象头为8个字节,有效负载为4个,对齐为4个额外字节),而Integer []使用的空间与int []相同.在64位VM中(使用64位指针,并非总是如此),Integer对象将消耗24个字节(标头为16,有效负载为4,对齐为4).另外,Integer []中的一个插槽将使用8个字节而不是int []中的4个字节.这意味着您可以预期每个插槽的开销为16到28个字节,与普通的int数组相比,这是4到7倍.
性能开销也很大,主要有两个原因:
总而言之,在性能关键工作中使用int []将比在当前VM中使用Integer数组更快且内存效率更高,并且在不久的将来这种情况不会发生太大变化.
| 归档时间: |
|
| 查看次数: |
4076 次 |
| 最近记录: |