IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> jvm内存区域之虚拟机栈、pc计数器、本地方法栈 -> 正文阅读

[Java知识库]jvm内存区域之虚拟机栈、pc计数器、本地方法栈

java内存区域

1、pc计数器

程序计数器的作用是什么?

  1. 字节码解释器通过改变程序计数器中存储的下一条字节码指令地址以此来达到流程控制
  2. Java多线程的线程会切换,为了保存线程切换前的正确执行位置,每个线程都应该有程序计数器,因此程序计数器是线程私有的 (私有是因为线程的数据结构维护了一个关于pc计数器的字段?所以私有?)pc计数器不会抛出异常,也没有垃圾回收。
  3. 执行本地方法时,程序计数器记录的是空

2、本地方法栈

**执行非java语言编写的方法时用到的栈,如c **

3、虚拟机栈

每当一个方法开始执行,就会方法所对应的栈帧入虚拟机栈。方法中调用其他方法 就会开始压栈。

3.1、栈帧的结构

** 栈帧包括返回地址、局部变量表、动态连接、一些附加信息、操作数栈**

虚拟机栈和栈帧
理解:栈帧相当于一个类,包含的返回地址、局部变量表、动态连接、一些附加信息、操作数栈相当于类的属性。

3.1.1、返回地址

执行方法后,有两种方式可以退出

1、正常调用完成
2、异常调用完成

  • 正常调用完成: 遇到方法返回的字节码指令
    • 方法退出有时需要在栈帧中保存一些信息以恢复上一层方法的执行状态(程序计数器的值)
  • 异常调用完成: 遇到异常未捕获(未搜索到匹配的异常处理器)
    • 以异常调用完成方式退出方法,不会在栈帧中保存信息,通过异常处理器来确定(不懂)
3.1.2、 附加信息

增加一些《Java虚拟机规范》中没有描述的信息在栈帧中(取决于具体虚拟机实现)

3.1.3、动态连接

动态连接:栈帧中指向运行时常量池所属方法的引用**

运行时常量池:jdk1.8后运行时常量池放在方法区中,字符串常量池放在堆中,方法区的具体实现是元空间(堆外内存)
静态解析与动态连接

符号引用转换为直接引用有两种方式

  • 静态解析:在类加载时解析阶段将符号引用解析为直接引用
  • 动态连接:每次运行期间把符号引用解析为直接引用(因为只有在运行时才知道到底指向哪个方法)
  • 为什么是动态连接能实现运行时才确定调用那个方法,主要是与invokevirtual指令有关(看深入理解jvm虚拟机310-311页)。
3.1.4、局部变量表

局部变量表用于存放方法中的实际参数方法内部定义的变量

以局部变量槽为单位(编译期间就确定了)

每个局部变量槽都可以存放**byte,short,int,float,boolean,reference,returnAddress**

byte,short,char,boolean在存储前转为int (boolean:0为false 非0为true)

double,long由 两个局部变量槽存放

每个局部变量槽的真正大小应该是由JVM来决定的

在构造方法和非静态方法中,this是局部变量表的第一个参数

3.1.5、操作数栈

操作数栈就相当于cpu的寄存器,jvm是栈式架构,当方法开始执行时,操作数栈是空的,执行引擎开始执行,才会有各种各样的字节码指令往操作数栈中执行入栈和出栈操作。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 20:35:37  更:2022-03-21 20:36:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 9:33:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码