JVM 源码分析之 JVM 启动流程
执行 Java 类的 main 方法,程序就能运行起来,main 方法的背后,虚拟机究竟发生了什么?如果你对这个感兴趣,相信本文会给你一个答案,本文分析的 openjdk 版本为 openjdk-7-fcs-src-b147-27
class BootStrap {
public static void main(String[] args) {
for (String str : args) {
System.out.println(str);
}
}}
java BootStrap -Xms6G -Xmx8G -Xmn3G -Xss512k
-XX:+UseConcMarkSweepGC -XX:+UseParNewGC
虚拟机的启动入口位于share/tools/launcher/java.c
的 main 方法,整个流程分为如下几个步骤:
1、配置 JVM 装载环境
2、解析虚拟机参数
3、设置线程栈大小
4、执行 Java main 方法
1、配置 JVM 装载环境
Java 代码执行时需要一个 JVM 环境,JVM 环境的创建包括两部分:JVM.dll 文件的查找和装载。
JVM.dll 文件的查找
通过CreateExecutionEnvironment
方法实现,根据当前 JRE 环境的路径和系统版本寻找jvm.cfg
文件,windows 实现如下:
大概实现逻辑:
1、GetJREPath
查找当前 JRE 环境的所在路径;
2、ReadKnownVms
读取JRE路径\lib\ARCH(CPU构架)\JVM.cfg
文件,其中ARCH(CPU构架)
通过GetArch
方法获取,在 window 下有三种情况:amd64、ia64 和 i386;
3、C