jvm学习

一、jvm组成

1. 本地变量表

this居然也会占用一个槽slot

局部变量表的槽会被复用!!!但形参和this好像不会被复用

在一个方法的执行上下文中,形参和this的Slot都不会被复用。Slot的复用通常发生在不同变量的作用域重叠时,例如一个局部变量在其作用域结束之后,后续在同一作用域层次声明的局部变量可能会复用之前变量释放的Slot。

2. 操作数栈和帧数据

操作数栈也是一种栈结构。

iadd 会将操作数栈顶端的两个元素弹出来相加,然后再次放入操作数栈。

异常表标明的异常表的生效范围,即在哪些指令之间 去捕获对应的异常。

在JVM字节码中,astore_<n>指令用于将一个引用类型(如对象引用)从操作数栈存储到局部变量表的第n个槽位中。例如,astore_1指令就是将栈顶的引用类型值存储到局部变量表的第1个槽位。这里的a代表"reference"类型(即对象引用或数组引用),store表明这是一个存储操作,而1是槽位索引。

3. 栈内存溢出

元空间独立于java虚拟机之外。位于操作系统维护的内存

二、 垃圾回收

1. 自动垃圾回收

与手动垃圾回收相比: 减少心理负担,但回收不及时。

应用场景如下:

2. 方法区的回收

①类加载器不再使用

②所加载的类的实例对象不再使用

③所加载类的java.lang.class不再使用

手动触发回收,仅仅是发送一个回收请求

3.引用计数法

如果使用引用计数法,

在栈内,a1引用了A的实例对象,b1引用了B的实例对象,计数器分别+1

在堆内A的实例对象引用了B的实例对象,B的实例对象也一样,计数器分别+1

此时,a1=null.A的计数器-1 , b1=null , B的计数器-1

此时计数器分别为1,无法被回收。

所以,java采用的是另一种方式。

相关推荐
CS创新实验室6 小时前
Python 对象“死“了之后去了哪?——引用计数与分代垃圾回收
开发语言·jvm·python
星恒随风9 小时前
Linux线程概念详解:从分页存储、页表、MMU与TLB,深入理解线程和进程的区别与联系
linux·运维·笔记·学习·状态模式
qq_284274059 小时前
数控机床编程基础与坐标系:编程六步流程、程序号/程序段/程序字格式,与右手定则下车床铣床XYZ轴判定(含考点)
笔记·学习·自动化·制造
德林恩宝9 小时前
On-Policy Distillation(OPD)学习文档
人工智能·学习·机器学习·大模型·llm·大模型微调
wuminyu9 小时前
JMM学习总结:深入理解happens-before关系
java·linux·c语言·jvm·c++
xxwl5859 小时前
区域赛分类题解
c++·笔记·学习·算法
xxwl58514 小时前
区域赛算法模版第八章---贪心(Greedy)
c++·笔记·学习·算法
qq_2842740515 小时前
S7-1200 PLC硬件与启保停实训:CPU选型与DC/DC/DC、循环扫描五阶段、博途组态及电动机启停自锁梯形图(含考点)
笔记·学习·自动化·制造
dear_bi_MyOnly15 小时前
栈和队列:从原理到应用全解析
c语言·开发语言·c++·学习·分类
遇印记16 小时前
应用层,网络管理
运维·网络·windows·学习·安全