在Java中使用boolean而不是byte或int

时间:2012-02-09 18:15:33

标签: java performance types

在Java中使用boolean而不是byte(如果我需要2个状态)对于性能有用或者只是幻觉......所有空间利润是否会通过对齐得到平衡?

6 个答案:

答案 0 :(得分:4)

除非您对代码进行了分析,否则您应该使用更清楚的代码,并决定进行此优化是值得的可读性成本。大多数时候,这种微优化不值得提高性能。

根据Oracle

  

boolean:...这种数据类型代表一位信息,但是它   “尺寸”不是精确定义的东西。

答案 1 :(得分:2)

为了给你一个想法,我曾经在迷你商店(16位机器)咨询过。

有时候人们会有一个“标志词”,一个包含16个布尔标志空间的全局int。

这是为了节省空间。

没关系,测试一个标志需要两个16位指令,并设置一个标志需要三个或更多。

答案 2 :(得分:1)

是的,布尔值可能只使用1位。但更重要的是,它使得阅读代码的其他开发人员更清楚地知道只有两种可能的状态。

答案 3 :(得分:1)

答案取决于您的JVM和代码。唯一能找到答案的方法是分析您的实际代码。

答案 4 :(得分:1)

如果您只想表示2个状态,并且希望减少内存使用量,则可以使用java.util.BitSet

答案 5 :(得分:1)

只有大多数JVM布尔值使用与字节相同的空间量。访问byte / boolean可能比访问int或long更多,所以如果性能是唯一的考虑因素,int或long可以更快。当您在线程之间共享一个值时,将整个高速缓存行保留到该字段可能是有利的(在最极端的情况下)这在许多CPU上是64字节。