我需要为大量8位值创建一个节省空间的2D数组。我开始使用几层抽象和泛型来编写我的类,以允许代码重用。一旦我实现了具体的类,它就发生了,我不能将原始类型作为泛型类参数传递,我将不得不使用包装类。因为我担心空间效率,所以我需要知道:使用包装类与原始 { Byte
数组之间的空间效率差异是什么? {1}} 数组?
答案 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字节
这是否重要在很大程度上取决于您的申请。除非你发现自己内存不足,否则假设没关系。