Java trie节点布尔与布尔

Java trie节点布尔与布尔,java,boolean,Java,Boolean,我正在创建trie节点类,它包含逻辑类型的字段,我不知道使用布尔或布尔更好 我知道Boolean的一个实例占用16个字节,4个字节占用32位VM中的引用。但是Boolean有Boolean.TRUE和Boolean.FALSE两个常量,它们可以用于空间优化。所以应用程序需要4*N+32字节,其中N是节点数,是吗 据我所知,在32位VM中,布尔值也需要4个字节(在数组中,它优化为每个元素1个字节) 但是,我可以使用这样的代码 boolean EOW = Boolean.TRUE; 但是它需要多少

我正在创建trie节点类,它包含逻辑类型的字段,我不知道使用布尔或布尔更好

我知道Boolean的一个实例占用16个字节,4个字节占用32位VM中的引用。但是Boolean有Boolean.TRUE和Boolean.FALSE两个常量,它们可以用于空间优化。所以应用程序需要4*N+32字节,其中N是节点数,是吗

据我所知,在32位VM中,布尔值也需要4个字节(在数组中,它优化为每个元素1个字节)

但是,我可以使用这样的代码

boolean EOW = Boolean.TRUE;
但是它需要多少空间,需要多少时间

那么,用什么来优化空间利用率和时间呢?
你能回答我它在64位虚拟机上占用了多少空间吗?

只需将原语类型
布尔值
true
false
一起使用即可。基元类型占用更少的内存,工作性能更好,并且是空安全的。

只需将基元类型
boolean
true
false
一起使用即可。原语类型占用更少的内存,工作性能更好,并且是空安全的。

我希望您粘贴的确切代码能够优化为
boolean EOW=true,所以它不应该被取消绑定,但是如果没有这样的优化,那么您就不会有任何内存受到影响,因为您使用的是静态字段,它只会被初始化一次。尽管如此,您仍然会丢失一个合法运行方法
booleanValue()
的操作,该方法只返回存储的值。实际上,我不知道你为什么想要这样一个表达式。

我希望你粘贴的确切代码被优化为
布尔EOW=true,所以它不应该被取消绑定,但是如果没有这样的优化,那么您就不会有任何内存受到影响,因为您使用的是静态字段,它只会被初始化一次。尽管如此,您仍然会丢失一个合法运行方法
booleanValue()
的操作,该方法只返回存储的值。事实上,我不知道你为什么想要这样一个表达式。

而不是这个:

boolean EOW = Boolean.TRUE;
写下这句话:

boolean EOW = true;
没有理由使用
Boolean.TRUE
,它将自动取消绑定到原始值
TRUE
,不管怎样,直接使用值
TRUE
更有效、更不冗长

只有当您有充分的理由这样做时,才使用诸如
Boolean
之类的包装类-否则,请使用诸如
Boolean
之类的基本类型。使用包装器的一个原因是当您需要在集合中存储值时(例如
ArrayList
)-集合类只能保存对象而不能保存基元值,因此在这种情况下必须使用包装器类

使用
Boolean
对象从来没有比使用
Boolean
基本值更有效

请注意,基本体值只是值,而不是对象。如果在代码中使用值
true
十次,内存中将不会有十个重复的对象。

而不是:

boolean EOW = Boolean.TRUE;
写下这句话:

boolean EOW = true;
没有理由使用
Boolean.TRUE
,它将自动取消绑定到原始值
TRUE
,不管怎样,直接使用值
TRUE
更有效、更不冗长

只有当您有充分的理由这样做时,才使用诸如
Boolean
之类的包装类-否则,请使用诸如
Boolean
之类的基本类型。使用包装器的一个原因是当您需要在集合中存储值时(例如
ArrayList
)-集合类只能保存对象而不能保存基元值,因此在这种情况下必须使用包装器类

使用
Boolean
对象从来没有比使用
Boolean
基本值更有效


请注意,基本体值只是值,而不是对象。如果在代码中使用值
true
十次,内存中将不会有十个重复的对象。

eah,我知道集合,因为泛型结构。我知道使用原语比使用包装器更好,但我不确定Boolean,所以你的意思是像
true
false
这样的值类似于兑现?根据你的帖子,我可以得出结论,这一切都需要
N*sizeOfReferences+8
字节?@MichaelH。像
true
false
这样的值只是基本值,就像基本整数值一样,例如(0,1,2,3,…)。这和缓存没有任何关系。@MichaelH。在Oracle的JVM上,我猜一个
boolean
将占用4个字节。
Boolean
变量是对
Boolean
对象的引用-引用本身将是4个字节,它引用的对象将占用一些内存,例如16个字节。远不止一个基本的
布尔值
。是的,我知道集合,因为泛型结构。我知道使用原语比使用包装器更好,但我不确定Boolean,所以你的意思是像
true
false
这样的值类似于兑现?根据你的帖子,我可以得出结论,这一切都需要
N*sizeOfReferences+8
字节?@MichaelH。像
true
false
这样的值只是基本值,就像基本整数值一样,例如(0,1,2,3,…)。这和缓存没有任何关系。@MichaelH。在Oracle的JVM上,我猜一个
boolean
将占用4个字节。
Boolean
变量是对
Boolean
对象的引用-引用本身将是4个字节,它引用的对象将占用一些内存,例如16个字节。远不止一个基本的
boolean