一、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的主要流程:

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

HotSpot设计原理与实现:一、初识HotSpot的更多相关文章

  1. Atitit.异常机制的设计原理

    Atitit.异常机制的设计原理 缺陷 关键是只要知晓有一个异常表的存在,try 的范围就是体现在异常表行记录的起点和终点.JVM 在 try 住的代码区间内如有异常抛出的话,就会在当前栈桢的异常表中 ...

  2. Atitit ati licenseService    设计原理

    Atitit ati licenseService    设计原理 C:\0workspace\AtiPlatf\src_atibrow\com\attilax\license\LicenseX.ja ...

  3. kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)

    问题导读: 1.zookeeper在kafka的作用是什么? 2.kafka中几乎不允许对消息进行"随机读写"的原因是什么? 3.kafka集群consumer和producer状 ...

  4. html5设计原理(转)

    转自:   http://www.cn-cuckoo.com/2010/10/21/the-design-of-html5-2151.html 今天我想跟大家谈一谈HTML5的设计.主要分两个方面:一 ...

  5. 学习HTML5必读之《HTML5设计原理》

    引子:很久前看过的一遍受益匪浅的文章,今天再次转过来,希望对学习HTML5的朋友有所帮助. 今天我想跟大家谈一谈HTML5的设计.主要分两个方面:一方面,当然了,就是HTML5.我可以站在这儿只讲HT ...

  6. 分布式文件系统FastDFS设计原理

    原文地址: http://blog.chinaunix.net/uid-20196318-id-4058561.html FastDFS是一个开源的轻量级分布式文件系统,由跟踪服务器(tracker ...

  7. ApplicationContext容器的设计原理

    1.在ApplicationContext容器中,我们以常用的FileSystemXmlApplicationContext的实现为例来说明ApplicationContext容器的设计原理. 2.在 ...

  8. BeanFactory容器的设计原理

    XmlBeanFactory设计的类继承关系 1.BeanFactory接口提供了使用IoC容器的规范.在这个基础上,Spring还提供了符合这个IoC容器接口的一系列容器的实现供开发人员使用. 2. ...

  9. Spring技术内幕——深入解析Spring架构与设计原理(一)IOC实现原理

    IOC的基础 下面我们从IOC/AOP开始,它们是Spring平台实现的核心部分:虽然,我们一开始大多只是在这个层面上,做一些配置和外部特性的使用工作,但对这两个核心模块工作原理和运作机制的理解,对深 ...

随机推荐

  1. sublime自动保存设置

    首选项——用户设置 (Preferences:Settings - User) 行末添加"save_on_focus_lost": true 注意用逗号分隔 保存即可 save_o ...

  2. 根据ip获取对应的省市区

    public static String getAddressByIp(String ip) { String resout = ""; try { if (isInner(ip) ...

  3. windows下的node环境搭建

    node环境的搭建过程: 1.首先在nodejs.org官网上下载一个msi安装文件,安装(过程很简单,基本上是一路next) 2.安装完成后,简单测试下是否安装成功,在cmd下输入两个命令: nod ...

  4. C# 解压与压缩文件

    解压文件 ,引用 SharpZipLib.dll类库 方法一: public void UnGzipFile(string zipfilename) { //同压缩文件同级同名的非压缩文件路径 var ...

  5. 使用AltSearch格式化Kindle读书笔记

    AltSearch是LibreOffice Writer的一个用于自动化执行复杂文本替换操作的扩展,能够在不需要复杂编程的条件下进行一些文档格式的手动与批量转换和调整.该扩展除了支持普通文本与正则表达 ...

  6. 【Android】activity-alias的使用

    activity-alias是android里为了重复使用Activity而设计的. 当在Activity的onCreate()方法里,执行getIntent().getComponent().get ...

  7. SQL反模式学习笔记20 明文密码

    目标:恢复或重置密码 反模式:使用明文存储密码 1.存储密码 使用明文存储密码或者在网络上传递密码是不安全的. 如果攻击者截取到你用来插入(或者修改)密码的sql语句,就可以获得密码.     黑客获 ...

  8. 遍历文件路径python版,java版

    python: # 获取所有txt路径列表 file_list = [] def gci(filepath): files=os.listdir(filepath) for fi in files: ...

  9. WinForm 水晶报表的简单使用

    今天需要做出一个水晶报表, 以前在学校的时候就看过一点点,有些印象, 但没有具体的了解过,今天百度了一下,发现这个东西相当的方便简单. 还很完美. 开发工具是VS2010,水晶报表没有内置.需要自己下 ...

  10. windows安装nexus3

    1.下载nexus3 https://www.sonatype.com/download-oss-sonatype 2.解压文件D:\javatool\ 3.在path中配置环境变量 D:\javat ...