HotSpot的顶层模块包含在/openjdk/hospot/src/share/vm中,分别为adlc、asm、cl、ci、classfile、code、compiler、gc、interpreter、libadt、memory、oops、opto、Prims、runtime、services、shark和utilities
1) 首先执行版本检查;
2) 检查并确认是否支持当前的JNI版本,并调用ostram_init()函数初始化输出流模块;
3) 调用Arguments模块的process_sun_java_launcher_propertites()函数配置Launcher的一些相关参数;
4) 调用init()函数初始化os模块,包括:随机数生成器(Random Number Generator)、当前进程id(CurrentProcess id)、高精度计时器(High-Resolution Timer)、内存页尺(Memory Page Size),以及保护页(Guard Pages)等;
5) 初始化一些系统属性,比如:java.version、java.vendor 和 os.name等;
6) 参数解析和记录系统虚拟机的创建时间等;
7) 在解析args参数后调用os模块的init_2()函数对内存、栈、线程等与os模块密切相关的部分进行初始化;
8) 配置垃圾收集器的输出流模块;
9) 如果用到agent库(hprof、 jdi)的话,则初始化并启动;
10) 初始化全局线程队列;
11) 初始化TLS模块;
12) 调用vm_init_globals()函数初始化全局数据结构,包括:事件日志(Event Log)、os同步原语、性能统计数据内存(perfMemory),以及内存分配器(chunkPool)等;
13) 创建Java主线程;
14) 初始化启动类加载器(Bootstrap ClassLoader)、CodeCache、解释器、JIT编译器、JNI、系统词典(System Dictionadry)等;
15) 将之前创建的java主线程合并到线程队列中;
16) 创建VM Thread;
17) 初始化java API中的一些基础类
18) 启动Signal Dispatcher线程
19) 初始化JIT编译器,并启动HotSpot编译代理线程
20) 启动HotSpot中的一些辅助线程。