java对JVM规范中引用大小的混淆
JVM规范声明引用只占用一个局部变量槽(JVM12.6.1)。此外,它指出double
和long
占用两个局部变量插槽,因为它们是64位的
这是否意味着所有符合JVM的实现都必须使用32位寻址?64位JVM如何处理这个问题?它们是使用64位局部变量插槽,还是使用2个插槽作为引用
你可以在下面搜索框中键入要查询的问题!
JVM规范声明引用只占用一个局部变量槽(JVM12.6.1)。此外,它指出double
和long
占用两个局部变量插槽,因为它们是64位的
这是否意味着所有符合JVM的实现都必须使用32位寻址?64位JVM如何处理这个问题?它们是使用64位局部变量插槽,还是使用2个插槽作为引用
# 1 楼答案
没有
插槽是一种抽象,其目的是允许指定字节码的行为。JVM解释器和JIT编译器做了一些聪明的事情,将插槽映射到虚拟内存地址。这些映射考虑到引用可能是32位或64位地址(或32位压缩OOP)这一事实
一个(抽象)插槽用于参考,与指针的实际大小无关
问:他们为什么这样定义插槽
答:所以相同的字节码在32位和64位Java平台上具有相同的含义
问:如果你试图将插槽中的内容视为不同的类型,为什么它不会崩溃
答:因为JVM的字节码分析器不允许你这么做