Java字节/字节数组空间效率比较

时间:2013-04-03 13:23:18

标签: java generics space-efficiency

我需要为大量8位值创建一个节省空间的2D数组。我开始使用几层抽象和泛型来编写我的类,以允许代码重用。一旦我实现了具体的类,它就发生了,我不能将原始类型作为泛型类参数传递,我将不得不使用包装类。因为我担心空间效率,所以我需要知道:使用包装类与原始 { Byte 数组之间的空间效率差异是什么? {1}} 数组

3 个答案:

答案 0 :(得分:5)

是的,与相应的Wrapper类对象相比,原语是轻量级的。

你可以在这里阅读:    Primitives vs Wrappers

答案 1 :(得分:3)

正在加载http://www.javamex.com/tutorials/memory/object_memory_usage.shtml

byte [] size~ = 12 + length

字节[]大小〜= 12 + 20 *长度(20 = 16 + 4大小为1字节对象+ 4字节参考)

因此,Byte []的内存可能比byte []多20倍。它实际上是最大的,它取决于您创建字节的方式。 new Byte始终是一个新的Object,Byte.valueOf始终是一个缓存的实例。它还取决于CPU,对于x64,每个引用需要8个字节。

答案 2 :(得分:1)

观看另一个问题: Wrappers of primitive types in arraylist vs arrays

  

double与Double的最大问题是后者增加了一些内存开销 - 在Sun 32位JVM上每个对象8个字节,可能或多或少在其他JVM上。然后你需要另外4个字节(64位JVM上的8个字节)来引用该对象。

     

因此,假设您有1,000,000个对象,差异如下:

     
    

双[百万]

  
     每个条目

8个字节;总计= 8,000,000字节

     
    

双[百万]

  
     

每个对象实例16个字节+每个引用4个字节;总计= 20,000,000字节

     

这是否重要在很大程度上取决于您的申请。除非你发现自己内存不足,否则假设没关系。