我正在创建trie节点类,其中包含具有逻辑类型的字段,我不知道最好使用boolean或Boolean。
我知道布尔的一个实例需要16个字节,4个字节需要它在32位VM中引用。但布尔值有常量Boolean.TRUE和Boolean.FALSE,可用于空间优化。因此,应用程序需要4 * N + 32字节,其中N是节点数,是吗?
到目前为止,我知道布尔值在32位VM中需要4个字节(在数组中它优化为每个元素1个字节)
但是我可以使用这样的代码
boolean EOW = Boolean.TRUE;
但需要多少空间以及需要多少时间进行自动装箱/收箱?
那么用什么来优化空间使用和时间会更好? 你能回答我在64位虚拟机上有多少空间吗?
答案 0 :(得分:3)
只需将原始类型boolean
与true
和false
一起使用即可。原始类型占用的内存较少,性能更好,并且是零安全的。
答案 1 :(得分:3)
而不是:
boolean EOW = Boolean.TRUE;
请写下:
boolean EOW = true;
没有理由使用Boolean.TRUE
,无论如何都会自动取消装箱原始值true
,使用值{{1}会更高效,更简洁直接。
只有在有充分理由的情况下才使用包装类,例如true
- 否则,请使用Boolean
等原始类型。使用包装器的一个原因是当您需要在集合中存储值(例如boolean
)时 - 集合类只能保存对象而不是原始值,因此您必须使用包装类在那种情况下。
使用ArrayList
对象永远不会比使用Boolean
原始值更有效。
请注意,原始值只是值,而不是对象。如果在代码中使用值boolean
十次,则内存中将不会有十个重复对象。
答案 2 :(得分:0)
我希望您粘贴的确切代码优化为boolean EOW = true;
,因此根本不应取消装箱,但如果没有这样的优化,那么您&# 39; ll没有任何受影响的内存,因为你使用静态字段,它只会被初始化一次。尽管如此,您仍然会在非正式运行方法booleanValue()
上丢失一个操作,这将只返回存储的值。实际上,我不知道为什么你会想要这样的表达。