上面详细解释了虚拟机的各个部分。
虚拟机的启动是通过调用给定类的main方法,向main传递一个字符串参数,从而加载指定的类,并绑定和初始化该类使用的其他类型。例如,对于程序:
publicclassHelloApp{
publicstaticvoidmain(String[]args){
n("HelloWorld!");
for(inti=0;i<;i++){
n(args);
}
}
}
编译后,以行模式输入命令:javaHelloApprunvirtualmachine
Java虚拟机将通过调用HelloApp主方法来启动,并且包含三个字符串“run”、“virtual”和“machine”的数组将被传递给main。我们现在描述虚拟机在运行HelloApp时可以采取的步骤。
我开始尝试运行HelloApp类的main方法,发现该类没有加载,这意味着虚拟机当前不包含该类的二进制代理,因此虚拟机使用ClassLoader来尝试找到一种这样的二进制表示。如果此过程失败,则会引发异常。在类加载之后、调用main方法之前,HelloApp类必须绑定其他类型,然后进行初始化。连接包括三个阶段:检查、准备和分析。验证检查加载的主类的符号和语义步骤是可选的。类的初始化是执行类中声明的静态初始化函数和静态字段的初始化构造函数。在初始化一个类之前,必须先初始化其父类。整个流程如下:
上一篇:云服务器可以搭建多少个ip
下一篇:java虚拟机运行什么文件