当前位置:网站首页>第4篇:从硬件/源码视角看JVM内存模型
第4篇:从硬件/源码视角看JVM内存模型
2022-06-21 06:14:00 【老王随聊】
老王带你从0~1学Java! Java基础内容、Java进阶内容以及Java面试题分享。无论你将来从事后端开发,还是从事大数据,亦或人工智能任一方向,Java基础一定要掌握好!
Java虚拟机可以看做是运行在操作系统之上的一个普通应用而已!
目录
1、从硬件视角看JVM内存模型

1.1 硬盘
硬盘主要存储Java应用三部分内容:Java源码文件(.java)、字节码文件(.class)、JRE环境。当Java应用运行时,会单独生产一个自己的JRE内存实例,起到了多个Java进程间的隔离作用。

1.2 内存
在内存中,常用操作系统进程的内存模型也有栈和堆概念,比如Linux的用户态堆栈和系统堆栈,Windows操作系统的堆栈。
那Java的“一次编译、到处运行”是由谁来负责实现的呢?——JVM
为了适配不同操作系统及硬件的使用规范,JVM基于操作系统之上建立了自己的内存模型。比如适配不同位数的操作系统(32或64)、适配不同CPU处理器等等。在应用启动的过程中,会在操作系统堆的基础上开辟出一块空间,来完成JVM七大模块内存划分。
JVM内存模型七大部分包含:Java堆、Java栈、永久区(JDK>=8.x)、PC计数器、执行引擎、本地接口和本地库。

这七大部分覆盖了Java源代码从加载、验证、准备、解析、初始化、使用及卸载的整个生命周期。
JVM各模块功能如下,


1.3 CPU
我们知道,CPU在整个硬件层面属于调度者和执行者的角色,也就是常说的”中央处理器“。那在Java应用运行过程中,CPU主要完成取指令、指令译码、执行指令、访存取数和结果写回这五部分(对于其他编程语言也适用)。

所以说,CPU是硬件和内存交互的桥梁。
2、 从JVM源码目录结构看解析流程
如何阅读JVM 源码,JDK中JVM本身并不开源,只能找来openJDK来看(和JDK相似度很高),有兴趣的自己可以去官网下载源码,不同版本目录结构会稍有差异,但功能模块基本是一致的。
Open JDK目录结构,

2.1 HotSpot目录结构

代码实现部分主要为C++语言,并伴有少量C语言和汇编语言。hotspot下包含四个子目录:agent、make、src和test。
make: 包含编译HotSpot的Makefile文件。
agent: 该目录主要实现SA。
test: 包含了Java实现的一些测试类。
src: 该目录主要由cpu、os、os_cpu和share组成。
1)cpu目录下是一些依赖具体CPU处理器架构的代码,比如Sparc、x86和Zero三种计算机体系结构;
2)os目录下则是一些依赖操作系统的代码,比如Linux、Windows、Solaris和Posix;
3)os_spu则是一些同时依赖cpu和操作系统的代码,比如Linux+x86和Windows+x86等;
4)share部分是独立于操作系统和处理器的代码,也是hotspot的核心功能。
2.2 src下share目录结构
2.2.1 tools目录

tools目录下,主要包含的几个程序是独立于虚拟机的工具类程序。
1) hsdis
hsdis是一个Sun官方推荐的HotSpot虚拟机JIT编译代码的反汇编插件。它的作用是让HotSpot的-XX : +PrintAssembly指令调用他来把动态生成的本地代码还原为汇编代码输出,同时还生成了大量非常有价值的注释,这样我们就可以通过输出的代码来分析问题。
2) IdealGraphVisualizer
IdealGraphVisualizer是C2的中间表示的可视化工具,它可以帮助理解C2理想图的构造过程, 日常用于分析编译代码过程。
3)sun.misc.Launcher类是java的入口,在启动java应用的时候会首先创建Launcher类,创建Launcher类的时候回准备应用程序运行中需要的类加载器。
4)LogCompilation
LogCompilation可以输出JIT的编译日志。使用指令 -XX:+LogCompilation。
5) ProjectCreator
ProjectCreator主要用于生成Visual Studio工程。
2.2.3 vm目录
主要目录作用说明。
1)prims模块里面定义的就是一些外部接口,供JDK或者其他应用程序调用。
2)servies和runtime公共模块,主要为虚拟机提供重要的基础作用。
3)Oop构成了hotspot内部的面向对象表示系统。
4)classfile提供了类的一些列解析功能。
5)memory模块提供了内存管理功能,jvm内存模型的实现就是在memory目录下。
6)gc就不用多说了,主要与垃圾收集器有关系。
7)Interpreter、C1和code等模块,主要与解释器个编译器的实现有关。
总结:通过上述硬件和代码结构两个层面,我们大致了解了JVM的内存模型以及内存模型实现前后所依赖的一系列软硬件相关适配功能。JVM看似内部实现复杂,实际上可以把它看做是一个跑着操作系统上的普通应用。另外,如果想去更深入了解JVM内存模型内部实现机制,可以进一步看memory的实现机制。
边栏推荐
- 端口占用解决
- 正则表达式基础
- Idea usage record
- 【数据挖掘】期末复习 第三章
- Aurora8b10b IP usage-03-ip configuration application guide
- nametuple的源码为什么要使用.replace(‘,‘, ‘ ‘).split()而不是.split(‘,‘)
- FPGA - 7系列 FPGA SelectIO -02- 源语简介
- 用递归和循环两种方法解决华为4月20日机试第一题(100分)
- Why should I use the source code of nametuple replace(‘,‘, ‘ ‘). Split() instead of split(‘,‘)
- R statistical plot - correlation of environmental factors +mantel test combination diagram (linket package introduction 1)
猜你喜欢
![[data mining] final review Chapter 5](/img/d1/0c16b881b018c2e29f028c2b937e17.png)
[data mining] final review Chapter 5
![[is the network you are familiar with really safe?] Wanziwen](/img/b4/6092ab3fd728e5d453ec38b089d027.png)
[is the network you are familiar with really safe?] Wanziwen

正则表达式基础

FPGA - 7 Series FPGA selectio -05- logic of logic resources

Broadcast mechanism of numpy
![[MySQL] SQL statement execution process of MySQL](/img/c8/76726de7ae3521f709e336a60ae3a2.png)
[MySQL] SQL statement execution process of MySQL

【数据挖掘】期末复习 第四章

Microbial ecological sequencing analysis -- CCA analysis

Deeply understand the gradient disappearance of RNN and why LSTM can solve the gradient disappearance

Several optimization methods of deep learning
随机推荐
Digital signal processing-07-dds IP application example
Aurora8B10B IP使用 -05- 收发测试应用示例
pyshark使用教程
Aurora8b10b IP usage-03-ip configuration application guide
[data mining] final review Chapter 3
Idea usage record
BN的一些细节
scala中函数和方法
That's great. MySQL's summary is too comprehensive
Microbial ecological data analysis - redundancy analysis
Cache cache (notes on principles of computer composition)
端口占用解决
The database is 8.0 students. In this place, add this paragraph? useSSL=false&serverTimezone=GMT%2B8&characterEncoding=utf8
Some details of BN
Unity隐藏目录和隐藏文件
What is the shortcut button 4 click of pychart?
Refine business details
Aurora8B10B IP使用 -02- IP功能设计技巧
Connection refused : no futher information : localhost/127.0.0.1:6379
leetcode 675. Cutting down trees for golf competitions - (day29)