java—混淆jvm规范中引用的大小

pgky5nke  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(367)

jvm规范规定引用只占用一个局部变量槽(jvms12.6.1)。此外,它还指出 double 以及 long ,占用两个局部变量插槽,因为它们是64位的。
这是否意味着所有符合jvm的实现都必须使用32位寻址?64位JVM如何处理这个问题?它们是使用64位局部变量插槽,还是使用2个插槽作为引用?

gev0vcfq

gev0vcfq1#

这是否意味着所有符合jvm的实现都必须使用32位寻址?64位JVM如何处理这个问题?它们是使用64位局部变量插槽,还是使用2个插槽作为引用?
不。
时隙是一种抽象,其目的是允许指定字节码的行为。jvm解释器和jit编译器做了一些聪明的事情,将插槽Map到虚拟内存地址。这些Map考虑了引用可能是32位或64位地址(或32位压缩oop)这一事实
一个(抽象)插槽用于引用,与指针的实际大小无关。
问:他们为什么这样定义槽?
答:所以相同的字节码在32位和64位java平台上具有相同的含义!
问:如果你试着把一个槽中的内容看作一种不同的类型,为什么它不会崩溃?
答:因为jvm的字节码分析器不允许您这样做!

相关问题