在Java中使用boolean
而不是byte
(如果我需要2个状态)对于性能有用或者只是幻觉......所有空间利润是否会通过对齐得到平衡?
答案 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字节。