java - java中的引用类型大小

为什么java中的引用类型占用8个字节?为什么不小于或大于 8 个字节?

最佳答案

实际上,并没有规定一个引用变量应该有多少字节,事实上,它并不是到处都一样。

32位系统(即内存总线中有32位地址的系统)的常见虚拟机通常使用32位(= 4字节,与intfloat) 作为对象引用的大小,而 64 位系统的虚拟机通常使用 64 位(= 8 字节)的 native 地址大小。 (请注意,大多数 64 位系统也可以运行 32 位程序,因此即使在那里您也经常使用 32 位 VM。)

这只是简化实现的问题,如果您可以使用实际的内存地址而不是其他内容作为引用。

因为这会增加所用内存的大小(通常我们实际上并不需要访问那么那么多内存),from Java 7 on 64 位 HotSpot VM 在特定条件下可以使用 32 位引用,即当堆小于 32 GB(8·232 字节)时。要将它们转换为实际内存地址,将它们乘以 8(因为对象将在 8 字节边界上对齐),然后添加到基地址(如果它不为零)。 (对于小于 4 GB 的堆,我们不需要乘法步骤。)

其他 VM 可能会使用类似的技巧。

关于java - java中的引用类型大

reference type size in java - Stack Overflow

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值