为什么未定义Java的布尔原始大小?

为什么未定义Java的布尔原始大小?,第1张

为什么未定义Java的布尔原始大小?

简短的答案:是的,布尔值作为32位实体进行 *** 作,但布尔数组每个元素使用1个字节

更长的答案:JVM使用32位堆栈单元,用于保存局部变量,方法参数和表达式值。小于1个单元的基元被填充,大于32位(长和双精度)的基元占用2个单元。这种技术可以最大程度地减少 *** 作码的数量,但是确实有一些特殊的副作用(例如需要屏蔽字节)。

数组中存储的基元可能使用少于32位,并且有不同的 *** 作码来加载和存储数组中的基元值。布尔值和字节值都使用

baload
bastore
*** 作码,这意味着布尔数组每个元素占用1个字节。

就内存对象布局而言,这在“私有实现” 规则下已涉及到,它可以是1位,1字节,或者如另一个提示所指出的,与64位双字边界对齐。最有可能的是,它占用基础硬件的基本字长(32或64位)。

尽量减少布尔值使用的空间:对于大多数应用程序来说,这实际上不是问题。堆栈框架(包含局部变量和方法参数)不是很大,并且在大型方案中,对象中的离散布尔也不大。如果你有许多带有大量布尔值的对象,则可以使用通过getter和setter管理的位域。但是,你将付出的CPU时间损失可能比内存中的损失更大。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5017585.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-14
下一篇 2022-11-14

发表评论

登录后才能评论

评论列表(0条)

保存