Java虚拟机的组成部分

1Java虚拟机的组成部分

在这里插入图片描述

1对虚拟机栈的理解

在这里插入图片描述
每个线程都有自己的,栈中的数据都是以栈帧的格式存在。
在这里插入图片描述
对于栈帧的理解
在每个线程上正在执行的每个方法都各自对应一个栈帧
在这里插入图片描述
在这里插入图片描述
每个栈帧都存放
在这里插入图片描述
对于局部变量表、操作数栈、动态链接、方法出口的理解
局部变量表:定义一个数字数组,主要用于存储方法参数和定义在方法体内的局部变量,这些数据类型包括各类基本数据类型、对象引用。
在这里插入图片描述
注意:局部变量表中也是重要的垃圾回收根节点,只要被局部变量表中直接或间接引用的对象都不会被回收。
在这里插入图片描述
0: iconst_1 将int类型常量1 压入 操作数栈
在这里插入图片描述
1: istore_1 将int类型的值存入局部变量1
在这里插入图片描述
4: iload_1
5: iload_2
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2对方法区的理解

在这里插入图片描述
在这里插入图片描述
方法区看做是一块独立于java堆的内存空间。
在这里插入图片描述
元空间不在虚拟机设置的内存中,而是使用本地内存。
在这里插入图片描述
方法区有:类型信息、常量、静态变量、及时编译器编译后的代码缓存等
non-final 与 final的区别:
在这里插入图片描述
运行时常量池常量池的理解:
常量池:可以看成是一张表,虚拟机指令根据这张常量表找到要执行的类名、方法名、参数类型、字面量等类型。

在这里插入图片描述

3对本地方法栈的理解?存放本地方法的空间

4对堆的理解

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
几乎所有的Java对象都是在Eden区被new出来的,绝大多数的Java对象的销毁也是在新生代。
在这里插入图片描述
在这里插入图片描述
关于垃圾回收:频繁在新生区收集,很少在养老区收集,几乎不再永久区/元空间收集。

5对于程序计数器的理解

作用:PC寄存器用来存储指向下一条指令的的地址,也即将要执行的指令的代码,由执行引擎读取下一条指令。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zs18753479279/article/details/114488999