一、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. 【原创】大数据基础之Impala(2)实现细节

    一 架构 Impala is a massively-parallel query execution engine, which runs on hundreds of machines in ex ...

  2. 【原创】算法基础之Anaconda(1)简介、安装、使用

    Anaconda 2 官方:https://www.anaconda.com/ 一 简介 The Most Popular Python Data Science Platform Anaconda® ...

  3. 【原创】大叔问题定位分享(19)spark task在executors上分布不均

    最近提交一个spark应用之后发现执行非常慢,点开spark web ui之后发现卡在一个job的一个stage上,这个stage有100000个task,但是绝大部分task都分配到两个execut ...

  4. Elasticsearch 安装和配置

      1. 下载并解压   wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.0.tar.gz   ...

  5. kafka_2.11-2.1.0测试

    kafka测试启动创建topic ./kafka-topics.sh --create --zookeeper dip005:2181,dip006:2181,dip007 --replication ...

  6. unity 网页加载AB问题

    下载一次后会缓存,清理一下就能加载新的同名AB了 AssetBundle.onload

  7. influxDB+grafana安装配置及邮件告警发送配置

    1. InfluxDB安装 下载包并解压: $:wgethttps://dl.influxdata.com/influxdb/releases/influxdb-1.3.6_linux_amd64.t ...

  8. python之cookie, cookiejar 模拟登录绕过验证

    0.思路 如果懒得模拟登录,或者模拟登录过于复杂(多步交互或复杂验证码)则人工登录后手动复制cookie(或者代码读取浏览器cookie),缺点是容易过期. 如果登录是简单的提交表单,代码第一步模拟登 ...

  9. python下载大文件

    1. wget def download_big_file_with_wget(url, target_file_name): """ 使用wget下载大文件 Note: ...

  10. eclipse打开工作空间(workspace)没有任务反应

    删除workspace下的.metadata文件夹,重新打开Eclipse就OK了.