java - java中的引用类型大小

Java的引用类型在32位系统中通常占用4字节,而在64位系统中通常是8字节,但64位的HotSpotVM从Java7开始在某些条件下可能使用32位引用。这取决于堆的大小,如果小于32GB,可以使用32位引用,考虑到对象的8字节对齐和可能的基地址。
摘要由CSDN通过智能技术生成

为什么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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值