jvm学习的核心(三)---运行时数据区详解(1)

news2024/11/19 18:24:08

图片等相关信息来源于:尚硅谷宋红康JVM全套教程
在这里插入图片描述

1.程序计数器

程序计数器又叫pc寄存器,中文有两个名字

我们可以反编译字节码文件查看方法中操作指令对应的指令地址

javap -v "对应的class文件"

在这里插入图片描述
为什么要用pc寄存器,pc寄存器有什么作用?

答:cpu在执行程序是会不停的切换线程,pc寄存器用于记录程序指令运行的位置。

2.虚拟机栈

在这里插入图片描述
虚拟机栈在线程创建时创建,为线程独有。

虚拟机栈中包含栈帧,栈帧也就对应着方法的调用和执行。

栈帧中包含着:局部变量表,操作数栈,动态链接,和方法返回地址

2.1:局部变量表:

  • 局部变量表也被称之为局部变量数组或本地变量表
  • 定义为一个数字数组,主要用于存储方法参数和定义在方法体内的局部变量这些数据类型包括各类基本数据类型、对象引用(reference),以及returnAddress类型
  • 由于局部变量表是建立在线程的栈上,是线程的私有数据,因此不存在数据安全问题
  • 局部变量表所需的容量大小是在编译期确定下来的,并保存在方法的Code属性的maximum local variables数据项中。在方法运行期间是不会改变局部变量表的大小的

2.1.1关于slot的理解

  • 参数值的存放总是在局部变量数组的index0开始,到数组长度-1的索引结 束
  • 局部变量表,最基本的存储单元是slot(变量槽)
  • 局部变量表中存放编译期可知的各种基本数据类型(8种),引用类型
    ( reference),returnAddress类型。
  • 在局部变量表里,32位以内的类型只占用一个slot(包括
    returnAddress类型),64位的类型(long和double)占用两个slot
    byte 、 short 、 char在存储前被转换为int,boolean也被转换为int,0都示false ,非0 表示true。
  • long 和double则占据两个slot

2.1.2局部变量表的补充

  • 方法嵌套调用的次数由栈的大小决定。一般来说,栈越大,方法嵌套调用次数越多。对一个函数而言,它的参数和局部变量越多,使得局部变量表感胀,它的栈帧就越大,以满足方法调用所需传递的信息增大的需求。进而函数调用就会占用更多的栈空间,导致其嵌套调用次数就会减少。
  • 局部变量表中的变量只在当前方法调用中有效。在方法执行时,虚拟机通过使用局部变量表完成参数值到参数变量列表的传递过程。当方法调用结束后,随着方法栈帧的销毁,局部变量表也会随之销毁。

2.2:操作数栈:

  • 每一个独立的栈帧中除了包含局部变量表以外,还包含一个后进先出(Last-In-First-out)的操作数栈,也可以称之为表达式栈(Expression stack)。
  • 操作数栈,在方法执行过程中,根据字节码指令,往栈中写入数据或提取数据,即入栈(push)/出栈(pop) .
    某些字节码指令将值压入操作数栈,其余的字节码指令将操作数取出栈。使用它们后再把结果压入栈。

比如:执行复制、交换、求和等操作

2.3:动态链接:

  • 每一个栈帧内部都包含一个指向运行时常员池中该栈帧所属方法的引月包含这个引用的目的就是为了支持当前方法的代码能够实现动态链接( Dynamic Linking)。比如: invokedynamic指令
  • 在Java源文件被编译到字节码文件中时,所有的变量和方法引用都作为符号引用(Symbolic Reference)保存在class文件的常量池里比如:描述一个方法调用了另外的其他方法时,就是通过常量池中指匠方法的符号引用来表示的,那么动态链接的作用就是为了将这些符号弓用转换为调用方法的直接引用。
  • 静态链接:
    当一个字节码文件被装载进JVM内部时,如果被调用的目标方法在编译期可矢且运行期保持不变时。这种情况下将调用方法的符号引用转换为直接引用的过程称之为静态链接。
  • 动态链接:
    如果被调用的方法在编译期无法被确定下来,也就是说,只能够在程序遗行期将调用方法的符号引用转换为直接引用,由于这种引用转换过程具备动态性,因此也就被称之为动态链接。
    这里是引用

对应的方法的绑定机制为:早期绑定(Early Binding)和晚期绑定( Late
Binding)。绑定是一个字段、方法或者类在符号引用被替换为直接引用的过程,这仅仅发生一次

  • 早期绑定就是指被调用的目标方法如果在编译期可知,且运行期保持不变时,即可将这个方法与所属的类型进行绑定,这样一来,由于明确了被调用的目标方法究竟是哪一个,因此也就可以使用静态链接的方式将符号引用转换为直接引用。
  • 晚期绑定: 如果被调用的方法在编译期无法被确定下来,只能够在程序运行期根据实际的类型绑定相关的方法,这种绑定方式也就被称之为晚期绑定。

2.4:方法返回地址:

存放调用该方法的pc寄存器的值。
一个方法的结束,有两种方式;
1.正常执行完成 2.出现未处理的异常,非正常退出

无论通过哪种方式退出,在方法退出后都返回到该方法被调用的位置。方法正常退出时,调用者的pc计数器的值作为返回地址,即调用该方法的指令的下一条指令的地址。而通过异常退出的,返回地址是要通过异常表来确定,栈帧中一般不会保存这部分信息。

面试题

1.举例栈溢出的情况? 通过-Xss设置栈的大小,使其出现溢出

2.调整栈大小,就能保证不出现溢出吗?
不一定,单纯的栈不够的可以解决,程序错误性问题无法解决
3.分配的栈内存越大越好吗?
不是
4.垃圾回收是否会涉及到虚拟机栈?
不会
5.方法中定义的局部变量是否线程安全?
如果是共享数据,不考虑同步机制会出现安全问题

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/163270.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

13、Javaweb_Filter登陆验证动态代理过滤敏感词Listener

Filter:过滤器 1. 概念: * 生活中的过滤器:净水器,空气净化器,土匪、 * web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。 * 过滤器的作用&…

深入理解计算机系统_可执行目标文件和可重定位目标文件的3个区别

这篇笔记对比一下可执行目标文件和可执行目标的3个区别。下图分别是可重定位目标文件和可执行目标文件各段结构。 1.1 可执行目标文件和可重定位目标文件的3个区别 区别1:可执行目标文件的rel.text和.rel.data消失了 链接器将.o中.text和.data节整合到一起时&a…

【ROS2入门】理解 ROS 2 Topics 话题

大家好,我是虎哥,从今天开始,我将花一段时间,开始将自己从ROS1切换到ROS2,在上一篇中,我们一起了解ROS 2中节点的功能以及与之交互的工具, 这一篇,我们主要会围绕ROS中另外一个重要的…

RS232 RS485 TO ETH TCP-Modbus 测试

原来modbus 传感器都是有对应的指令码的,不同功能的指令码也不一样,比如测温度和湿度的指令码也是不一样的; 硬件连接如下图 (温湿度传感器,板载SHT20) ​ 编辑切换为居中 添加图片注释,不超…

华为VRRP、BFD实验配置

目录 VRRP实验配置 BFD实验配置 配置单跳检测 配置多跳检测 配置单臂回声 BFD与路由协议联动配置 BFD与OSPF联动 BFD与ISIS联动 BFD与BGP联动 VRRP实验配置 VRRP配置 AR1配置(VRRP缺省优先级100) int g0/0/0 ip add 192.168.10.1 24 vrrp vrid …

织音云站长扶持计划:可免费获得CDN或虚拟主机

活动介绍活动详情页:织音云站长扶持计划网站被恶意攻击时是中小站长最脆弱的时候,90%的站长都会动“关站不干了”的心思,夹在中间真的很难搞!因此织音云决定为中小站长提供免费的全球CDN加速服务和提供免费的虚拟主机,免备案!只需…

智改数转水循环在线监测系统,提升企业生产安

江苏省政府印发《江苏省制造业智能化改造和数字化转型三年行动计划(2022-2024年)》,提出通过三年的努力,全省制造业数字化、网络化、智能化水平显著提升,新业态、新模式、新动能显著壮大,制造业…

linux系统中使用QT操作硬件蜂鸣器的方法

大家好,今天主要和大家聊一聊,如何使用QT进行蜂鸣器的控制与实现。 目录 第一:资源基本简介 第二:应用实例的代码实现 第三:源文件“mainwindow.cpp”的具体实现 第四:程序运行效果 第一:资…

自动控制原理课程设计

一、实验目的(1)要求学生根据书上习题的要求,自行设计一校正装置,并用本 实验挂件 构成的模拟系统 进行实验和实际调试、使学生能认识到校正装置在系统中的重要性。(2)掌握工程中常用的 二阶系统 和 三阶系统 的工程设计方法。二、实验所需挂件及附件型 …

Docker 安装mysql主从复制

1、新建主服务器容器实例3307docker run -d -p 3307:3306 -v /mydata/mysql-master/log:/var/log/mysql -v /mydata/mysql-master/data:/var/lib/mysql -v /mydata/mysql-master/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORDroot --name mysql-master mysql:5.72、进入/myd…

Acwing——第二场热身赛

题目链接 AcWing 3547. 特殊数字 AcWing 3548. 双端队列 AcWing 3549. 最长非递减子序列 题目描述 3547.特殊数字 我们规定,对于一个整数 a,如果其各位数字相加之和能够被 4 整除,则称它是一个特殊数字。 现在,给定一个整数 n…

算法第十一期——BFS(广度优先搜索)入门与应用

目录 BFS BFS:找最短路路径 BFS:用队列实现 特点 最短路径问题用BFS 应用场合 例题一 【思路】 输出路径的两种方法 简单方法 标准方法(栈) BFS:连通性判断 例题二:全球变暖 【思路】 BFS的三种实现 1、queue实现 2、 li…

分享66个Java源码,总有一款适合您

Java源码 分享66个Java源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下...,大家下载后可以看到。 源码下载链接:https://pan.baidu.com/s/1wnPO7GfR_cVmDb2qx-4vEw?pwdlrsu …

Android 深入系统完全讲解(16)

2 属性权限 我们来看下属性权限的整体流程,简单分析下这个模块。init.cpp -->property_init() init 进程 进入第二阶段的时候,初始化属性。 关键点,创建了一个目录,这个目录就是我们属性后续会存在的地方。加载对应文件中的配…

[ADT笔记]图(graph)

定义 其实跟树差不多&#xff0c;但是树强调的是节点&#xff08;data&#xff09;&#xff0c;图则既强调节点又强调边。 分类 有向图&#xff08;边有方向&#xff09;无向图&#xff08;边没方向&#xff09; 例如&#xff0c;在无向图里<j,i>和<i,j>是同一…

(简单成功版本)Mysql配置my.ini文件

目录 一、背景 二、删除原有的mysql服务 三、初始化mysql 四、自行添加my.ini文件 五、新建mysql服务 六、启动mysql服务 七、设置数据库密码 7.1 登录mysql数据库 7.2 修改root用户密码 八、配置my.ini问题 一、背景 我在两台电脑上安装了MySQL Server 8.0&#xff0…

谈谈你对React的理解?

1、思路 讲讲概念、说用途、设计思路和原理、有什么优缺点 2、概念 一句话解释技术本质&#xff0c;React是javascript的UI库&#xff0c;通过组件化的方式解决视图层开发复用问题&#xff0c;本质是组件化框架。 viewfn(props) const A(props)><div>A</div&g…

java打包之jar和war为何出现又有什么区别

文章目录jar为什么诞生如何打jar包war为什么诞生如何打war包jar与war有什么区别jar与war的种类&#xff08;进阶&#xff09;参考资料jar为什么诞生 java工程有大量文件&#xff0c;在部署的时候需要向服务器上传大量文件&#xff0c;如果有了jar的话&#xff0c;只需上传一个…

鹅鹅鸭又崩了咋办?试试这5个方法

要说最近大火的游戏&#xff0c;鹅鹅鸭/鹅鸭杀绝对算一个。这种休闲策略游戏&#xff0c;还能跟朋友、家人约着一起玩。 不过最近很多玩家在玩鹅鹅鸭时都遇到闪退、卡顿、进不去等情况&#xff0c;虽然有太火爆服务器不稳定&#xff0c;服务器被攻击的原因&#xff0c;但有时候…

【机器学习之模型融合】Voting投票法基础理论

目录 1、认识模型融合&#x1f338; 2、模型融合和集成算法的区别&#x1f339; 3、常见模型融合方式&#x1f341; 4、投票法Voting&#x1f33f; 4.1、不同的投票方法&#x1f334; 1、认识模型融合&#x1f338; 在机器学习竞赛界&#xff0c;流传着一句话&#xff1a;…