zoukankan      html  css  js  c++  java
  • 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后退出

  • 相关阅读:
    swoole 安装方法 使用即时聊天
    git的介绍以及简单应用
    curl的应用
    linux下监听和同步代码配置
    mac skim 修改背景色
    php 编译安装的一个 configure 配置
    mac mysql error You must reset your password using ALTER USER statement before executing this statement.
    yii2 控制器里 action 大小写组合造成的路由问题
    warning : json_decode(): option JSON_BIGINT_AS_STRING not implemented in xxx
    redis 自启动脚本
  • 原文地址:https://www.cnblogs.com/wshcn/p/10303187.html
Copyright © 2011-2022 走看看