通过完整的路径(即二进制文件)找到此类字节代码文件。将二进制文件的静态存储结构转换为方法区域的数据结构,并使用二进制流文件创建类对象,并存储在法国地区数据结构的数据结构参考的入口处;
JVM将在此阶段检查二进制字节流。只有那些符合JVM字节码规范的人才能由JVM正确执行。该阶段是确保JVM安全性的重要障碍,以及以下一些主要检查。
JVM将在此阶段分配内存和合并的初始化(也称为静态变量,关键字修改)(对应于数据类型的默认初始值,例如0、0L,NULL,NULL,FALSE等)。
目前,实例变量的内存将无法分配,因为实例化对象时,实例变量是在Java桩中创建的。int类型的值为0,参考类型零值为null,而不是代码中显示的值。
在此阶段,常数池中的符号被引用为直接参考。
文字卷和符号引用存储在类文件中的常数池中。符号引用包括界面的完整名称和字段以及接口的名称和描述。
当JVM动态链接是动态的时,有必要根据这些符号引用将其转换为直接引用到存储器使用。
此阶段是类加载过程的最后一步。在准备阶段,类变量已得到默认初始值,在初始化阶段,类变量将分配给代码期望的值。单词,初始化阶段是执行构造方法的过程。
1.创建一个Java源文件test02.java并在主方法中完成完整的简单逻辑操作,如下所示:
2.通过Javac命令在终端中编译Helloworld.java。
3.反向汇编为我们可以理解的JVM指令。在这里,我们使用Javap -c命令完成。
4.反复作用后的JVM指令如下所示:
说明上述JVM上述说明
第1行表示当前字节码文件汇编。
第3行表示未打开的构造函数的调查以实例化当前对象。
第4行至第七行指示执行过程,而无需构建功能。
第5行意味着将其按下操作堆栈。
第6行表示test02父类对象的非施法结构。我们知道,当每个对象实例化时,每个对象都会立即实例化其父类,并且默认情况下调用了父级非秘密结构。
第7轮返回表示执行构造函数。
第10行22行指示主方法的执行过程。
第11行表示将常数5按在操作号码堆栈中。
第12行表示操作号码堆栈的最高元素,即5,然后将其保存到本地变量表的第一个位置,即变量i。
第13行表示将常数10按在操作号码堆栈中。
第14行指示操作号堆栈的顶部元素,即10,然后将其保存到本地变量表的第二位置,即变量j。
第15行表示,将第一个变量(i)按在操作号码堆栈中。
第16行指出,将局部变量表(J)的第二个变量(J)按下操作号码堆栈。
第17行表示添加了操作号码堆栈中的前两个值,并将结果按在操作号码堆栈的顶部。
第18行表示操作号码堆栈的最高元素保存到本地变量表的第三位置,即变量k。
第19行指示读取静态实例printstream。
第20行表示,将局部变量表的第三变量(k)按在操作号码堆栈中。
第21行是指调用PrintStream的Println方法输出操作号码堆栈元素(变量K)。
第22行返回意味着执行主方法。
作者:第一次思考和初恋