有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java对JVM规范中引用大小的混淆

JVM规范声明引用只占用一个局部变量槽(JVM12.6.1)。此外,它指出doublelong占用两个局部变量插槽,因为它们是64位的

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


共 (1) 个答案

  1. # 1 楼答案

    Does this mean that all JVM compliant implementations must use 32-bit addressing? How do 64-bit JVMs handle this? Do they use 64 bit local variable slots, or do they use 2 slots for references?

    没有

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

    一个(抽象)插槽用于参考,与指针的实际大小无关

    问:他们为什么这样定义插槽

    答:所以相同的字节码在32位和64位Java平台上具有相同的含义

    问:如果你试图将插槽中的内容视为不同的类型,为什么它不会崩溃

    答:因为JVM的字节码分析器不允许你这么做