剖析HotSpot的初始化过程

1.HotSpot的构成模块

    HotSpot的顶层模块包含在/openjdk/hospot/src/share/vm中,分别为adlc、asm、cl、ci、classfile、code、compiler、gc、interpreter、libadt、memory、oops、opto、Prims、runtime、services、shark和utilities

剖析HotSpot的初始化过程_第1张图片

2.跟踪HotSpot的初始化过程

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中的一些辅助线程。


你可能感兴趣的:(java,jvm,JAVA虚拟机)