java - Java 方法可以有超过 255 个局部变量吗?

标签 java jvm bytecode low-level opcode

iload Java 操作码用于将值从局部变量数组 (LVA) 压入操作数堆栈。

此操作码采用单个字节作为参数 ( en.wikipedia.org/wiki/Java_bytecode_instruction_listings ),用作 LVA 的索引。

如果 LVA 的一个元素始终是对象的引用(我想这不是静态方法的情况,但现在让我们忽略它们),并且如果恰好一个字节用作索引(可能有 256 个)值),那么一个方法如何访问超过 255 个不同的局部变量?

最佳答案

是的,Java 方法可以有超过 255 个局部变量。 wide 操作码指令可用于修改 iloadaload 指令以使用 16 位索引而不是 8 位索引,这意味着您可以在一个函数中拥有多达 65536 个不同的局部变量,只要 wide 操作码最终被使用。

也就是说,请注意 Java 局部变量不一定与 JVM 局部变量一一对应。 Java 编译器可能会查看您的代码,注意到局部变量的空间可以在某些上下文中重复使用,然后将多个 Java 局部变量映射到相同的 JVM 局部变量。

希望这对您有所帮助!

关于java - Java 方法可以有超过 255 个局部变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14026053/

相关文章:

language-design - 设计简单编程语言的方法

java - 将接口(interface)转换为RMI接口(interface)

java - IBM as400 假脱机文件读取

java - 我需要有关在 Java GUI 上添加函数的帮助

java - 是否必须安装 Ant 才能运行 Maven 的 maven-antrun-plugin?

java - 为什么 collections.sort 在 Java 中按比较器排序时会抛出不支持的操作异常?

io - Java 虚拟机如何处理 I/O 操作?

jvm - 为什么 javac 校验数组两次?

java - 理解 perf.map

python字节码兼容性