Java中的内存更快,内存更少:int []或boolean []?

时间:2012-09-26 07:42:38

标签: java arrays performance

在Java中,内存更快,内存更少:int[n]boolean[n]Bitset(n)

此问题适用于小型数组(n最多1000),中等(n介于1000100000之间)和巨大的数组(n大于100000个)。谢谢。

我想实现标志(1/0)存储。

5 个答案:

答案 0 :(得分:2)

在大多数JVM上;数组或对象的开销为12-16字节。 int使用4个字节而boolean使用一个字节(它没有,但它与OpenJDK / HotSpot一起使用)BitSet使用两个对象和更多内存用于小集合,但每个只有一个位有。因此,对于小型集合,int[]可能小于BitSet,但随着大小的增长,BitSet将是最小的。

如果数据结构小于您的缓存,则最快的是int[],然后是boolean[],然后BitSet这是因为将int打入{byte会产生非繁琐的开销{1}}或者一点点。

但是,一旦您的缓存大小变得很重要,与使用较慢缓存或主内存的开销相比,BitSet的开销可能会减少。

简而言之:如果有疑问,请使用BitSet,因为这样你的意图更清晰,而且可能更快。

答案 1 :(得分:1)

实际上,它依赖于JVM。例如,Sun JVM将boolean类型转换为int。这意味着甚至布尔变量使用32位。但是jvm优化布尔数组,并为每个布尔数组单元保留8位。

答案 2 :(得分:0)

Java内部存储boolean int。因此int[]boolean[]完全相同。

BitSet使用更少的内存。是否更快取决于您的使用模式。

答案 3 :(得分:0)

内存使用的降序

int[n] > Bitset(n) > boolean[n] 

但是,在访问索引时,应该没有任何区别。

答案 4 :(得分:0)

考虑用枚举替换位标志。然后你可以使用例如EnumSet而不是Bitset。