实际上,它没有指定引用变量应该有多少字节,事实上,它并不是到处都是相同的.
用于32位系统的常见虚拟机(即内存总线中具有32位地址的系统)通常使用int与float对象引用大小相同的32位(= 4字节,相同和),而64位系统的虚拟机通常使用使用本机地址大小64位(= 8字节).(请注意,大多数64位系统也可以运行32位程序,所以即使在那里你也常常使用32位VM.)
如果您可以使用实际的内存地址作为引用而不是其他内容,那么这只是简化实现的问题.
由于这增加了所使用的内存大小(通常我们实际上并不需要访问那么多内存),因此从 64位HotSpot VM 上的Java 7将能够在某些条件下使用32位引用,即堆小于32 GB(8·2 32字节).要将它们转换为实际的存储器地址,它们将乘以8(因为对象将在8字节边界上对齐),然后将其添加到基址(如果不为零).(对于小于4 GB的堆,我们不需要乘法步骤.)
其他虚拟机可能会使用类似的技巧.
| 归档时间: |
|
| 查看次数: |
6047 次 |
| 最近记录: |