如果我创建 10 个整数和一个 10 的整数数组,占用的总空间会有什么差异吗?
我必须创建一个包含数百万条记录的布尔数组,所以我想了解数组本身将占用多少空间。
整数数组表示为保存整数的内存块和对象头。对于 32 位 JVM,对象标头通常需要 3 个 32 位字,但这与平台相关。 (标头包含一些标志位、对类描述符的引用、原始锁定信息的空间以及实际数组的长度。加上填充。)
因此 10 个整数的数组可能占据以下区域13 * 4
bytes.
在这种情况下Integer[]
,每个 Integer 对象都有一个 2 字标题和一个包含实际值的 1 字字段。并且还需要添加填充和1个字(或64位JVM上的1到2个字)以供参考。这通常是数组的每个元素 5 个字或 20 个字节...除非某些 Integer 对象出现在数组中的多个位置。
Notes:
- 在 64 位 JVM 上实际用于引用的字数取决于是否使用“压缩的 oops”。
- 在某些 JVM 上,堆节点以 16 字节的倍数分配……这会增加空间使用量(例如上面提到的填充)。
- 如果您获取对象的身份哈希码,并且它在下一次垃圾回收中幸存下来,则其大小会增加至少 4 个字节以缓存哈希码值。
- 除了上面列举的可变性来源之外,这些数字都是特定于版本和供应商的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)