一文理清JVM结构

JVM结构介绍

JVM一共分为三个组成部分:

1 类加载子系统

主要是将class文件加载到内存中的一个系统,其核心组件是类加载器

2 运行时数据区子系统

1 JVM私有部分

1 虚拟机栈

描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。

2 本地方法栈

与虚拟机栈类似,不过却是为虚拟机使用到的Native方法服务

HotSpot虚拟机将虚拟机栈和本地方法栈合二为一

3 程序计数器

可以看作当前线程所执行的字节码的行号指示器

2 JVM公有部分

1 方法区(类元信息)

存放已被虚拟机加载的类的类信息、常量、静态变量、即时编译器编译后的代码

对HotSpot虚拟机来说,也称为永久代(Permanent Generation)

-jdk1.6及之前:有永久代,常量池在方法区

-jdk1.7:有永久代,但已逐步"去永久代",常量池转移到堆中

-jdk8及之后:无永久代,常量池在元空间

2 JAVA堆

存放几乎所有的对象实例和数组,GC的主要区域

从内存回收的角度,可划分为新生代和老年代,可进一步细分为Eden空间、From Survivor空间、To Survivor空间

从内存分配的角度,可能刻分出多个线程私有的分配缓冲区(TLAB)

3 执行引擎子系统:

负责程序的执行和垃圾回收

相关推荐
axng pmje36 分钟前
Java语法进阶
java·开发语言·jvm
dFObBIMmai1 小时前
MySQL主从同步中大事务导致的延迟_如何拆分大事务优化同步
jvm·数据库·python
szccyw02 小时前
mysql如何限制特定存储过程执行权限_MySQL存储过程安全访问
jvm·数据库·python
2401_882273723 小时前
如何在 CSS 中正确加载本地 JPG 背景图片
jvm·数据库·python
2301_795099746 小时前
让 CSS Grid 自适应容器尺寸的动态布局方案
jvm·数据库·python
kexnjdcncnxjs10 小时前
Redis如何记录每一次写操作_开启AOF持久化机制实现命令级追加记录
jvm·数据库·python
上弦月-编程12 小时前
C语言指针从入门到实战
java·jvm·算法
通往曙光的路上14 小时前
JVM面试题
jvm
2401_8822737214 小时前
pattern属性在旧版Android浏览器无效怎么办_手动验证补充【操作】
jvm·数据库·python
清水白石00815 小时前
深入 Python 循环引用与垃圾回收:如何应对内存管理的挑战
java·jvm·python