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的主要流程:
初始化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的更多相关文章
- Atitit.异常机制的设计原理
Atitit.异常机制的设计原理 缺陷 关键是只要知晓有一个异常表的存在,try 的范围就是体现在异常表行记录的起点和终点.JVM 在 try 住的代码区间内如有异常抛出的话,就会在当前栈桢的异常表中 ...
- Atitit ati licenseService 设计原理
Atitit ati licenseService 设计原理 C:\0workspace\AtiPlatf\src_atibrow\com\attilax\license\LicenseX.ja ...
- kafka入门:简介、使用场景、设计原理、主要配置及集群搭建(转)
问题导读: 1.zookeeper在kafka的作用是什么? 2.kafka中几乎不允许对消息进行"随机读写"的原因是什么? 3.kafka集群consumer和producer状 ...
- html5设计原理(转)
转自: http://www.cn-cuckoo.com/2010/10/21/the-design-of-html5-2151.html 今天我想跟大家谈一谈HTML5的设计.主要分两个方面:一 ...
- 学习HTML5必读之《HTML5设计原理》
引子:很久前看过的一遍受益匪浅的文章,今天再次转过来,希望对学习HTML5的朋友有所帮助. 今天我想跟大家谈一谈HTML5的设计.主要分两个方面:一方面,当然了,就是HTML5.我可以站在这儿只讲HT ...
- 分布式文件系统FastDFS设计原理
原文地址: http://blog.chinaunix.net/uid-20196318-id-4058561.html FastDFS是一个开源的轻量级分布式文件系统,由跟踪服务器(tracker ...
- ApplicationContext容器的设计原理
1.在ApplicationContext容器中,我们以常用的FileSystemXmlApplicationContext的实现为例来说明ApplicationContext容器的设计原理. 2.在 ...
- BeanFactory容器的设计原理
XmlBeanFactory设计的类继承关系 1.BeanFactory接口提供了使用IoC容器的规范.在这个基础上,Spring还提供了符合这个IoC容器接口的一系列容器的实现供开发人员使用. 2. ...
- Spring技术内幕——深入解析Spring架构与设计原理(一)IOC实现原理
IOC的基础 下面我们从IOC/AOP开始,它们是Spring平台实现的核心部分:虽然,我们一开始大多只是在这个层面上,做一些配置和外部特性的使用工作,但对这两个核心模块工作原理和运作机制的理解,对深 ...
随机推荐
- 史上最明白的 NULL、0、nullptr 区别分析(老师讲N篇都没讲明白的东东),今天终于明白了,如果和我一样以前不明白的可以好好的看看...
C的NULL 在C语言中,我们使用NULL表示空指针,也就是我们可以写如下代码: int *i = NULL; foo_t *f = NULL; 实际上在C语言中,NULL通常被定义为如下: #def ...
- iOS 中的屏幕旋转shouldAutorotate和supportedInterfaceOrientations的先后关系
这2个UIViewController的属性,都和旋转相关, 当设备发生旋转时,首先会查看根controller的shouldAutorotate是否允许旋转,如果允许,再通过 supportedIn ...
- js编译原理(你不知道的javascript)
虽然通常将js归类为"动态"或"解释执行"语言,但其实也可把它看成是一门编译语言.只不过这个所谓的编译与传统的编译语言不同,它不是提前编译的,编译结果也不能在分 ...
- C++反汇编调试
1.使用 OllyDBG打开的dll文件,最好找破解pro版本.不然没有编辑权限 ,目前OllyDBG并不支持eclipse IDE 64位编辑的 .class文件类型. 另外使用反编译的时候物理内 ...
- hdu3652 数位dp记忆化搜索
从未见过的船新版本数位dp,,省去了预处理过程,直接进行计算 #include<bits/stdc++.h> using namespace std; #define ll long lo ...
- Linux下如何查看系统启动时间和运行时间以及安装时间
1.uptime命令输出:16:11:40 up 59 days, 4:21, 2 users, load average: 0.00, 0.01, 0.00 2.查看/proc/uptime文件计算 ...
- sbadmin表单事件
Form表单 自定义表单 <from action="" method="'><!--- 这里可以用表单组件快速生成表单元素哦 ...
- 辅助排序和Mapreduce整体流程
一.辅助排序 需求:先有一个订单数据文件,包含了订单id.商品id.商品价格,要求将订单id正序,商品价格倒序,且生成结果文件个数为订单id的数量,每个结果文件中只要一条该订单最贵商品的数据. 思路: ...
- Jenkins 快速上手指南
步骤: 在服务器上安装好jenkins. 在浏览器地址栏输入:服务器地址+":8080/jenkins",回车访问jenkins主页. 单击“新建”,创建任务.如下图: 为任务命名 ...
- Django聚合分组查询、常用字段
首先回顾sql中聚合和分组的概念: 如果没有分组,会把整张表作为一个大组,查询字段必须是聚合结果:如果有分组,分组之后,必须要使用聚合的结果作为having的条件. 聚合查询 聚合:aggregate ...
