iload #index与其他3字节代码的区别在于它使用了2个字节的字节码,而iload_1 _2 _3只使用了1个字节。通常情况下,它们之间没有性能差异,但有些性能调优指标是基于字节码字节数的,例如是否内联方法等。稍微长一点的方法可能会导致某些优化无法执行,例如内联方法的度量标准即使很少被调用也需要35个字节。如果代码使用iload#而不是iload_1,则意味着它比35个字节略长,这样就不会被内联。
当启动新线程时,JVM会为该线程创建一个新的堆栈,并且当线程调用Java方法时,虚拟机会在线程的Java堆栈上创建并推送一个新帧。 堆栈帧由三部分组成:局部变量、操作数堆栈、帧数据。局部变量以从零开始的单词数组形式组织。这些iload_1、iload_2、iload_3是局部变量数组的入门级别。因此,iload_1表示引用局部变量数组的第一个索引。类似地,iload_2和iload_3分别表示引用局部变量数组的第二个和第三个索引。因此,在这些iload_1、iload_2和iload_3中没有具体区别,而是引用局部变量数组中相应的索引。