jvm-all-1-程序计数器/栈/局部变量表/操作数栈

[复制链接]
发表于 2025-3-22 23:16:16 | 显示全部楼层 |阅读模式

1、什么是程序计数器

什么是程序计数器?
背景:
相信学过计算机组成原理的人都知道,CPU内部的寄存器中就包含一个程序计数器(x86下为eip寄存器,ARM下为R15寄存器)存放程序执行的下一条指令地址。
程序每次执行时,CPU都会自动存储下一条指令的地址,以便下次继续执行。
jvm偷学CPU:
JVM也是参考了CPU的程序计数器,自己设计了一个程序计数器,用于储存JVM当前执行bytecode的地址(节码指令地址)。
程序计数器记录当前线程正在执行的字节码的地址。
程序计数器是线程隔离的,每一个线程在工作的时候都有一个独立的计数器。

image.png

2、什么是字节码指令地址

image.png

3、为什么要存储这个字节码指令地址呢

image.png

4、程序计数器的特点

image.png

1.简单讲下什么是程序计数器?
2.程序计数器为什么要存储字节码指令地址呢?
3.为什么程序计数器具有线程隔离性?
4.为什么程序计数器是java虛拟机规范中唯- 一个没有规定任何OutofMemeryError的区域?

5、java栈

随线程而生,随线程而灭的虚拟机栈

image.png

image.png

image.png

6、局部变量表

局部变量表是用来做什么的

image.png
字节码指令地址和源码关联

image.png
查看局部变量表

image.png

局部变量表存储的数据类型

image.png

image.png
index 是指的槽位角标, 下图前3个都是一个槽位,第4个long类型是两个槽位

image.png

局部变理表的对象引用原理
引用对象只有一个sLof 槽位

image.png

image.png

image.png

7、操作数栈以及压栈和出栈

image.png

压栈和出栈流程

image.png

image.png

image.png

image.png

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

GMT+8, 2025-4-20 17:08 , Processed in 0.069378 second(s), 36 queries Archiver|手机版|小黑屋|Attic ( 京ICP备2020048627号 )

快速回复 返回顶部 返回列表