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后退出


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM