当前位置:网站首页>第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的实现机制。
边栏推荐
- Q & A: issues related to "micro build low code" billing
- 5254. 卖木头块 动态规划
- FPGA - 7系列 FPGA SelectIO -02- 源语简介
- FPGA - 7系列 FPGA SelectIO -06- 逻辑资源之ODELAY
- The time plug-in is used for the establishment time, but when modifying parameters on the web page, if the time is not modified, an error will be reported when saving it for the first time, and it can
- JPA的基本使用
- Regular expression Basics
- tf. contrib. slim. conv2d()
- Aurora8B10B IP使用 -02- IP功能设计技巧
- [JVM] classloader
猜你喜欢

FPGA - 7系列 FPGA SelectIO -02- 源语简介
![[data mining] final review Chapter 4](/img/40/725c40bda7dcda02325e46991129aa.png)
[data mining] final review Chapter 4

构建和保护小型网络考试

TypeError: iter() returned non-iterator of type ‘xxx‘

What is the shortcut button 4 click of pychart?
![[data mining] final review Chapter 2](/img/ac/1aaf7921153738ddc45ca95ce5f0ee.png)
[data mining] final review Chapter 2

MSF intranet penetration

IDEA 使用记录

FPGA - 7 Series FPGA selectio -06- odelay of logic resources

高考那些事
随机推荐
Backtracking method of graph coloring problem (the most easy to understand)
三维引擎软件Vizard入门
After the code is generated by the code generator, the copy is completed, and the module is not displayed on the web page
Aurora8B10B IP使用 -04- IP例程应用实例
Fastdfs cluster
我的高考经历与总结
Direct attack on the Internet layoffs in 2022: flowers on the ground, chicken feathers on the ground
FPGA - 7 Series FPGA selectio -03- ILOGIC of logic resources
MSF intranet penetration
【数据挖掘】期末复习 第四章
IP - 射频数据转换器 -04- API使用指南 - 系统设置相关函数
认知语言学之框架与脚本
Le premier caractère unique de la chaîne (4)
Error running code generator file: the server time zone value ' й ��� ʱ ��‘ is unrecognized or represents more than one time
xshell7远程连接服务器,挂起进程一直维持程序的运行
用递归和循环两种方法解决华为4月20日机试第一题(100分)
FPGA - 7 Series FPGA selectio -05- logic of logic resources
【毕业季】纸短情长,浅谈大二以前的学习经历
FPGA - 7 Series FPGA selectio -01- introduction and DCI technology introduction
双调查找:数组先递增后递减