上面详细解释了虚拟机的各个部分。我们通过一个具体的例子来分析一下它的持续过程。
虚拟机的启动是通过调用指定类的main方法,向main传递一个字符串数组参数,从而加载指定的类,并链接和初始化该类使用的其他类型。例如对于程序:
publicclassHelloApp{
publicstaticvoidmain(String[]args){
n("HelloWorld!");
for(inti=0;i<;i++){
n(args);
}
}
}
编译完成后,在命令行模式下输入:javaHelloApprunvirtualmachineJava虚拟机将通过调用HelloApp方法main来启动,并且包含三个字符串“run”,“virtual”和“machine”的数组将被传递给main。现在我们概述虚拟机在运行HelloApp时可以采取的步骤。
我开始尝试运行HelloApp类的main方法,发现该类还没有被加载,这意味着虚拟机当前不包含该类的二进制表示,因此虚拟机使用ClassLoader来尝试找到这样的二进制代表。如果此过程失败,则会引发异常。在类加载之后、调用main方法之前,HelloApp类必须连接其他类型,然后进行初始化。链接由三个阶段组成:检查、准备和解析。验证检查加载的主类的符号和语义。准备工作为类或接口创建静态字段并将这些字段初始化为默认值,这一步是可选的。类的初始化是执行类中声明的静态域的静态初始化函数和初始化构造函数。在初始化一个类前,必须先初始化其父类。整个流程如下:
上一篇:256g内存卡多少钱
下一篇:虚拟机终端打开文件指令