Java 声明一次与重复声明
想象一下这些版本中的函数: 静态int fibonaccierativeint n{ int-previous=0; int电流=1; 对于int i=1;iJava 声明一次与重复声明,java,bytecode,Java,Bytecode,想象一下这些版本中的函数: 静态int fibonaccierativeint n{ int-previous=0; int电流=1; 对于int i=1;i
也就是说,这比你想象的更不相关,因为字节码不是JVM大部分时间执行的东西。相反,它只是一种抽象。对于任何性能真正重要的代码,JVM都会对代码进行静态分析,然后对其进行优化并将其编译为本机代码,因此字节码编码中的细微差异无论如何都是毫无意义的。在字节码级别根本不声明变量,忽略了关于调试元数据的常见警告。相反,每个方法都有一个最多65535个插槽的表,字节码可以从中存储和检索值。编译器将为每个变量分配一个插槽,确保不会对具有重叠活动范围的变量重用插槽 所以在你的例子中,我希望唯一的区别是temp和我以不同的顺序分配插槽,但是字节码在其他方面是相同的 也就是说,这比你想象的更不相关,因为字节码不是JVM大部分时间执行的东西。相反,它只是一种抽象。对于任何性能真正重要的代码,JVM都会对代码进行静态分析,然后对其进行优化并将其编译为本机代码,因此字节码编码中的细微差异无论如何都是毫无意义的。变量temp在循环中一次又一次地声明它不是。java编译器将改变这一点。您可以通过反编译编译编译的类并将反编译器生成的源代码与原始源代码进行比较来进行验证。变量temp在循环中一次又一次声明它不是。java编译器将改变这一点。您可以通过反编译已编译的类并将反编译器生成的源代码与原始源代码进行比较来进行验证。