剖析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


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


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值