java中的引用类型大小

man*_*noj 5 java

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

Paŭ*_*ann 9

实际上,它没有指定引用变量应该有多少字节,事实上,它并不是到处都是相同的.

用于32位系统的常见虚拟机(即内存总线中具有32位地址的系统)通常使用intfloat对象引用大小相同的32位(= 4字节,相同和),而64位系统的虚拟机通常使用使用本机地址大小64位(= 8字节).(请注意,大多数64位系统也可以运行32位程序,所以即使在那里你也常常使用32位VM.)

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

由于这增加了所使用的内存大小(通常我们实际上并不需要访问那么多内存),因此 64位HotSpot VM Java 7将能够在某些条件下使用32位引用,即堆小于32 GB(8·2 32字节).要将它们转换为实际的存储器地址,它们将乘以8(因为对象将在8字节边界上对齐),然后将其添加到基址(如果不为零).(对于小于4 GB的堆,我们不需要乘法步骤.)

其他虚拟机可能会使用类似的技巧.


ada*_*shr 4

这是因为引用变量实际上并不保存该对象。这是达到目标的一种方式。JVM 管理此问题的方式是我们最不关心的。您可以将其视为堆中对象位置的地址。但它不必像地址一样简单。