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平台实现的核心部分:虽然,我们一开始大多只是在这个层面上,做一些配置和外部特性的使用工作,但对这两个核心模块工作原理和运作机制的理解,对深 ...
随机推荐
- 【原创】大数据基础之Impala(2)实现细节
一 架构 Impala is a massively-parallel query execution engine, which runs on hundreds of machines in ex ...
- 【原创】算法基础之Anaconda(1)简介、安装、使用
Anaconda 2 官方:https://www.anaconda.com/ 一 简介 The Most Popular Python Data Science Platform Anaconda® ...
- 【原创】大叔问题定位分享(19)spark task在executors上分布不均
最近提交一个spark应用之后发现执行非常慢,点开spark web ui之后发现卡在一个job的一个stage上,这个stage有100000个task,但是绝大部分task都分配到两个execut ...
- Elasticsearch 安装和配置
1. 下载并解压 wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.0.tar.gz ...
- kafka_2.11-2.1.0测试
kafka测试启动创建topic ./kafka-topics.sh --create --zookeeper dip005:2181,dip006:2181,dip007 --replication ...
- unity 网页加载AB问题
下载一次后会缓存,清理一下就能加载新的同名AB了 AssetBundle.onload
- influxDB+grafana安装配置及邮件告警发送配置
1. InfluxDB安装 下载包并解压: $:wgethttps://dl.influxdata.com/influxdb/releases/influxdb-1.3.6_linux_amd64.t ...
- python之cookie, cookiejar 模拟登录绕过验证
0.思路 如果懒得模拟登录,或者模拟登录过于复杂(多步交互或复杂验证码)则人工登录后手动复制cookie(或者代码读取浏览器cookie),缺点是容易过期. 如果登录是简单的提交表单,代码第一步模拟登 ...
- python下载大文件
1. wget def download_big_file_with_wget(url, target_file_name): """ 使用wget下载大文件 Note: ...
- eclipse打开工作空间(workspace)没有任务反应
删除workspace下的.metadata文件夹,重新打开Eclipse就OK了.
