# 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类