当前位置:首页 > 虚拟机 > 正文

java虚拟机的启动细节


一、java虚拟机的运行过程

上面详细解释了虚拟机的各个部分。让我们通过一个具体的例子来看看他的推理。
虚拟机的初始化是通过调用特定类的main方法,将一串数组参数传递给main,从而加载特定类,并关联并初始化该类的其他类型。例如,对于程序:
publicclassHelloApp{
publicstaticvoidmain(String[]args){
n("Hello!");
for(inti=0;i<;i++){
n(args);
}
}
}
编译后,在命令行模式下输入:javaHelloApprunvirtualmachine
Java虚拟机将通过调用HelloAppmain方法来启动,并向main发送一个包含“run”、“virtual”和“machine”三个字符串的数组。现在概述了我们在实现HelloApp时要采取的虚拟机步骤。
我尝试执行HelloApp类的main方法,发现该类没有加载,这意味着虚拟机当前不包含该类的二进制表示,因此使用虚拟机的ClassLoader进行搜索对于这样的二元代表。如果此过程失败,则会被拒绝。在类加载之后,调用main方法之前,HelloApp类必须与其他类型关联起来,然后进行初始化。该链接由三个步骤组成:检查、准备和解析。验证检查主类加载器的符号和语义。创建类或接口的静态字段并将这些字段设置为标准默认值是一个可选步骤。初始化类是类中声明的静态初始化函数和静态字段的初始化构造函数的实现。在初始化一个类之前,必须先初始化其父类。整个流程如下:


二、怎么启动JAVA里的JVM?

方法如下:

1.虚拟机启动入口在share/tools/launcher/中。

2.配置JVM加载环境。

3.分析虚拟机设置。

4.设置线程堆栈大小。

5.运行Javamain。