本文记录openjdk1.8 启动过程流程梳理。
Jdk中java的入口函数文件为openjdk\jdk\src\share\bin\main.c中的main方法(window上为WinMain),然后调用jdk8u-dev/jdk/src/share/bin/java.c的JLI_Launch方法,启动一个jvm虚拟机;
程序入口
作用:程序入口
位置:openjdk\jdk\src\share\bin\main.c
JLI_Launch
作用:java入口函数,解析参数、创建环境、加载jvm动态库
位置:jdk8u-dev/jdk/src/share/bin/java.c
JVMInit
作用:执行虚拟机入口函数
位置:jdk8u-dev/jdk/src/solaris/bin/java_md_solinux.c
ContinueInNewThread
作用:组织参数,执行真正的虚拟机入口函数
位置:jdk8u-dev/jdk/src/share/bin/java.c
ContinueInNewThread0
作用:尝试创建新线程执行代码逻辑,创建新线程失败则在当前线程执行代码逻辑
位置:jdk8u-dev/jdk/src/solaris/bin/java_md_solinux.c
JavaMain
作用:虚拟机的入口函数
位置:jdk8u-dev/jdk/src/share/bin/java.c
InitializeJVM
作用:通过libvm.so导出的函数创建虚拟机并和JNIEnv绑定
位置:jdk8u-dev/jdk/src/share/bin/java.c
JNI_CreateJavaVM
作用:创建java虚拟机
位置:jdk8u-dev/hotspot/src/share/vm/prims/jni.cpp
Threads::create_vm
作用:hotspot创建java虚拟机函数
位置:jdk8u-dev/hotspot/src/share/vm/runtime/thread.cpp
领取专属 10元无门槛券
私享最新 技术干货