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采用的是另一种方式。

相关推荐
不羁的木木7 分钟前
【开源鸿蒙跨平台开发学习笔记】Day01:React Native 开发 HarmonyOS-环境搭建篇
学习·开源·harmonyos
@小红花14 分钟前
从零到精通 Hadoop 的系统学习文档
大数据·hadoop·学习
d111111111d32 分钟前
W25Q60简介--SPI通信(笔记)
笔记·stm32·单片机·嵌入式硬件·学习
minhuan1 小时前
大模型应用:大模型本地部署实战:从零构建可视化智能学习助手.2
学习·生成式ai·大模型应用·大模型本地部署·学习助手
BullSmall2 小时前
《道德经》第六十七章
学习
qy-ll2 小时前
最新MMO-IG生成图像论文学习(25/11/19)
图像处理·深度学习·学习·计算机视觉·论文学习·遥感
fmk10233 小时前
TailwindCSS 学习笔记
笔记·学习
月下的郁王子3 小时前
进阶学习 PHP 中的二进制和位运算
android·学习·php
xinxingrs3 小时前
贪心算法、动态规划以及相关应用(python)
笔记·python·学习·算法·贪心算法·动态规划
秋邱4 小时前
驾驭数据洪流:Python如何赋能您的数据思维与决策飞跃
jvm·算法·云原生·oracle·eureka·数据分析·推荐算法