jvm启动过程
开辟主线程
- 由c++的初始化现场(initThread)开辟的一个线程,它将作为java领域的主线程
- 由main线程,的start方法,开始运行java程序
初始化BootstrapClassLoader,加载系统类
- 将
rt.jar
解压至特定目录; - 加载8个基本类型,以及Void;
- 加载String以及Thread, 实例化Thread,并将当前主线程与Thread实例进行绑定;
- 加载并实例化ThreadGroup,创建主线程组
- 加载并初始化System类
- 加载并初始化Perf与LauncherHelper;
- 通过LauncherHelper调用Launcher的AppClassLoader加载启动类,并执行其main方法
启动的注意事项
- jvm启动的时候,一些基础的系统类已经被加载了.
- 类加载器机制与java共同协作完成;
jvm的认识
本质
- jvm的核心,是一个字节码引擎(ByteCodeEngine)
- 字节码引擎内部,是一个
switch cace
结构,case中,判断的是16进制数,天然具有索引能力,O(1)的时间复杂度
生态
- jvm本身,至少包含三个线程,
initThread,mainThread,gcThread
- 启动jvm本身,需要进行初始化操作,比如加载java程序运行所必须的java类