关于JVM规范中引用大小的困惑

时间:2019-09-12 14:49:51

标签: java jvm specifications

JVM规范指出,引用仅占用一个局部变量插槽(jvms12 2.6.1)。此外,它指出doublelong占用两个局部变量插槽,因为它们是64位的。

这是否意味着所有符合JVM的实现都必须使用32位寻址? 64位JVM如何处理此问题?他们使用64位局部变量插槽还是使用2个插槽作为参考?

1 个答案:

答案 0 :(得分:3)

  

这是否意味着所有符合JVM的实现都必须使用32位寻址? 64位JVM如何处理此问题?他们使用64位局部变量插槽还是使用2个插槽作为参考?

不。

插槽是一种抽象,其目的是允许指定字节码的行为。 JVM解释器和JIT编译器做了一些聪明的事情,将插槽映射到虚拟内存地址。这些映射考虑到引用可能是32或64位地址(或32位压缩OOP)的事实

一个(抽象)插槽用于引用指针的实际大小

问:为什么他们要这样定义广告位?

A:因此,相同的字节码在32位和64位Java平台上具有相同的含义!

问:如果您尝试将某个插槽的内容视为另一种类型,为什么它不会崩溃?

A:因为JVM的字节码分析器不允许您这样做!