HotSpot设计原理与实现:一、初识HotSpot

一、HotSpot内核模块组成和功能框架

1、HotSpot内核模块图

(1)Prims模块:

(2)Service模块:

(3)Runtime模块:

 

 

二、虚拟机生命周期(JVM初始化过程)

 

1、虚拟机生命周期时序图

 

虚拟机生命周期

1:Lancher JVM启动器

  Lancher是用于启动JVM和应用程序的工具,HotSpot中提供两种Lancher类型:通用启动器(即JDK命令程序:java,为产品级启动器)、调试版启动器gamma

   通用启动器:入口在hotspot/../jdk/src/share/bin/main.c

   调试版启动器:入口在/hotspot/src/share/tools/lancher/java.c

   Lancher入口main函数:不同操作系统中main函数的原型存在差异

         Linux或Unix系统中:在/hotspot/src/share/tools/lancher/java.c

         Windows系统中:../jdk/src/share/bin/main.c

   main工作重点:创建一个运行环境,启动一个新的线程创建JVM,并调用Java程序的main方法

新线程(主线程)执行入口:JavaMain方法  ,伴随应用程序的整个生命周期

2:主线程(JavaMain线程)

JavaMain方法在:/hotspot/src/share/tools/lancher/java.c

    JavaMain的主要流程:

JavaMain主程序流程3:InitializeJVM()方法:

                初始化JVM,完成对vm和env指派接口函数的重任

 

4:JNI_CreateJavaVM函数:

     主要任务是调用Threads模块的create_vm()函数,以完成最终的虚拟机的创建和初始化工作。

     在Threads模块中,实现对虚拟机各个模块的初始化,以及创建虚拟机线程.

 

5:create_vm()初始化JVM系统相关模块

 

6:add()函数,将线程加入线程队列

 

7:create()函数,创建虚拟机线程”VMThread”

     VMThread是在JVM内部执行VMOperation的线程,实现JVM内部的核心操作,为其他运行时模块以及外部程序接口服务。VMThread线程创建成功后,在整个运行期间不断等待/接受并执行制定的VMOperation

    创建守护线程,包括:Signal Dispatcher,Attach Listener,Watcher  Thread等

 

8:vm_init_globals():

      实现对全局性数据结构的初始化,比如初始化Java基本类型系统、分配全局事件缓存区、初始化事件队列、初始化全局锁、初始化内存池、初始化JVM性能统计数据区(Perf Data)

 

9:init_globals()函数初始化全局模块 

      全局模块有:JMX(Manage模块),Code Cache(代码高速缓存),StubRountines,Universe,解释器,模板表,stubs

 

10:LoadClass()函数加载应用程序主类    

 

11:jni_CallStaticVoidMethod()函数实现对Java应用程序的主方法的调用。

 

12:jni_DetachCurrentThread()函数

 

13:jni_DestroyJavaVM()函数,销毁JVM后退出

posted @ 2019-01-22 12:45  奋斗超云  Views(4129)  Comments(0Edit  收藏  举报