Sup*_*tar 5 java memory-management boolean
我对SO的搜索失败了,所以如果这是重复的,请重定向我.
有了这个问题,我的问题是:我从经验和浏览中了解到,如果将Java 声明为独立值,则将Java boolean存储为32位,int如果byte在数组中声明它,则将其作为8位存储.我的问题在这里如下:哪个内存更有效?阵列的元数据是否使其在内存中的变大?
boolean oneVariable = false, oneArray[] = {false};
Run Code Online (Sandbox Code Playgroud)
数组的“元数据”包括:
添加布尔数据的 1 个必要字节,至少有 13 个字节(32 位)或 21 个字节(64 位)。
然而,对象以 8 字节的倍数分配内存,因此即使您只需要 12 或 20 字节的开销 + 1 字节的布尔值,您最终也会为数组对象分别使用 16 或 24 字节的内存。
除了对象本身占用的 16/24 字节之外,您还需要 4 字节(32 位)或 8 字节(64 位)作为对象的内存地址,总共分别需要 20 或 32 字节的内存,将布尔值存储在数组中。
独立变量的大小取决于 JVM。Java没有指定存储的大小,事实上Oracle是这么说的
这种数据类型表示一位信息,但其“大小”并不是精确定义的。
较旧的 JVM 使用 32 位堆栈单元,用于保存局部变量、方法参数和表达式值,因此用作变量的单个布尔值将消耗 4 个字节;使得数组的成本至少是单个布尔值的 5 倍。例如,如果布尔值是一个类变量,则这个答案可能会有所不同,在这种情况下,它只是添加到现有开销中的单个字节。在较新的 JVM 中,单个布尔值仅使用 1 个字节,但根据其上下文和对齐内存地址所需的 8 字节填充,仍可能消耗最多 8 个字节的堆空间。它仍然比布尔数组小。
| 归档时间: |
|
| 查看次数: |
713 次 |
| 最近记录: |