JVM - 字节码执行引擎

news2024/11/25 14:40:14

目录

栈帧和局部变量表

概述

栈帧概述

栈帧概念结构

局部变量表

slot是复用的实例

操作数栈

概述

动态连接

方法调用

静态分派和动态分派


  • 栈帧和局部变量表

  • 概述

  • JVM的字节码执行引擎,功能基本就是输入字节码文件,然后对字节码进行解析并处理,最后输出执行的结果
  • 实现方式可能有通过解释器直接解释执行字节码
  • 或者是通过即时编译器产生本地代码,也就是编译执行,当然也可能两者皆有
  • 栈帧概述

  • 栈帧是用于支持JVM进行方法调用和方法执行的数据结构
  • 栈帧随着方法调用而创建,随着方法结束而销毁
  • 栈帧里面存储了方法的局部变量、操作数栈、动态连接、方法返回地址等信息
  • 栈帧概念结构

  • 局部变量表

  • 用来存放方法参数和方法内部定义的局部变量的存储空间
  • (1)以变量槽slot为单位,目前一个slot存放32位以内的数据类型
  • (2)对于64位的数据占2个slot
  • (3)对于实例方法,第0位slot存放的是this,然后从1到n,依次分配给参数列表
  • (4)然后根据方法体内部定义的变量顺序和作用域来分配slot
  • (5)slot是复用的,以节省栈帧的空间,这种设计可能会影响到系统的垃圾收集行为
  • slot是复用的实例

  • 看空间变化的区别(多了个变量空间居然变多了)

  • 没加a变量时,这样分配slot

  • 这是因为slot里还在用bs,所以没回收
  • 加a变量时,bs是个局部变量,出了块就不再用了
  • slot会复用,分配会发生变化

  • bs就能进行回收了,可用空间自然就变大了

  • 再加个bs2,明显bs2没有进行回收
  • 这是因为bs2并没有被复用覆盖掉
  • 只有bs被覆盖了

  • 所以可以再加个占用空间小的变量,把bs2复用覆盖掉,让它能进行回收

  • 也可以赋值为null,把指针弄没,也能进行回收

  • 操作数栈

  • 概述

  • 用来存放方法运行期间,各个指令操作的数据
  • (1)操作数栈中元素的数据类型必须和字节码指令的顺序严格匹配
  • (2)虚拟机在实现栈帧的时候可能会做一些优化,让两个栈帧出现部分重叠区域,以存放公用的数据
  • 动态连接

  • 每个栈帧持有一个指向运行时常量池中该栈帧所属方法的引用,以支持方法调用过程的动态连移
  • (1)静态解析:类加载的时候,符号引用就转化成直接引用
  • (2)动态连接:运行期间转换为直接引用
  • 方法调用

  • 就是确定具体调用哪一个方法,并不涉及方法内部的执行过程
  • (1)部分方法是直接在类加载的解析阶段,就确定了直接引用关系
  • (2)但是对于实例方法,也称虚方法,因为重载和多态,需要运行期动态委派
  • 静态分派和动态分派

  • 分派:又分成静态分派和动态分派
    • (1)静态分派:所有依赖静态类型来定位方法执行版本的分派方式,比如:重载方法
    • (2)动态分派:根据运行期的实际类型来定位方法执行版本的分派方式,比如:覆盖方法
  • 单分派和多分派:
    • 就是按照分派思考的纬度,多余一个的就算多分派,只有一个的称为单分派
  • 如何执行方法中的字节码指令:JVM通过基于栈的字节码解释执行引擎来执行指令,JVM的指令集也是基于栈的

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

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

相关文章

jdk19下载与安装教程(win10)超详细

一、下载安装步骤 1、官网下载还需要注册,可以点【我的网盘】目录下载,目录也有其它低版本的,如果有需要大家根据需要自行选择。 2、下载后直接点击安装程序,点击【运行】。这里我使用的是64位的。 3、点击【下一步】。 4、默认安…

28-Golang中的数组

Golang中的数组数组介绍数组的定义和内存布局数组的定义数组的内存图数组 的使用访问数组元素案例四种初始化的方式for-range结构遍历基本语法说明案例数组使用注意事项和细节数组应用案例1.创建一个byte类型的26个元素的数组,分别放置A-Z。使用for循环访问所有元素…

分享SEO优化的8个技巧

什么是SEO? SEO是Search Engine Optimization的缩写,直译过来就是“搜索引擎优化”的意识。故名意思,SEO是一种优化(提高)网站在搜索引擎内的自然排名的行为的统称。 当里个当,当里个当,闲言碎语不要讲&a…

Web应用程序自动化测试工具Selenium的主要功能有哪些?

Selenium是一个用于Web应用程序测试的工具。是一个开源的Web的自动化测试工具,最初是为网站自动化测试而开发的,类型像我们玩游戏用的按键精灵,可以按指定的命令自动操作,不同是Selenium可以直接运行在浏览器上,它支持…

VSCode最新版本下载安装详细教程(win10)

VSCode是Microsoft发布的一款运行于多个操作系统,针对于编写现代Web和云应用的跨平台的源代码编辑器, 可在桌面上运。它具有对JavaScript,TypeScript和Node.js的内置支持,并具有丰富的其他语言(例如C,C&…

vue-echarts实现多功能图表

前言作为前端人员,日常图表、报表、地图的接触可谓相当频繁,今天小编隆重退出前端框架之VUE结合百度echart实现中国地图各种图表的展示与使用;作为“你值得拥有”专栏阶段性末篇,值得一看主要实现功能——中国地图——环形图——折…

Springboot扩展点之DisposableBean

前言DisposableBean,是在Spring容器关闭的时候预留的一个扩展点,从业务开发的角度来看,基本上是用不到的,但是Spring容器从启动到关闭,是Spring Bean生命周期里一个绕不开的节点,因此还是有必要学习一下&am…

Web3中文|关于以太坊“上海升级”,你需要知道哪些?

今年3月,以太坊将进行自2022年9月转向权益证明系统以来的首次大升级,即上海硬交叉。一旦以太坊完成“上海升级”,帮助运营网络的验证者将能够提取1600万枚被质押的以太币(ETH)。 除了重点落实以太坊改进建议——4895&…

吉林电视台启用乾元通多卡聚合系统广电视频传输解决方案

随着广播电视数字化、IP化、智能化的逐步深入,吉林电视台对技术改造、数字设备升级提出了更高要求,通过对系统性能、设计理念的综合评估,正式启用乾元通多卡聚合系统广电视频传输解决方案,将用于大型集会、大型演出、基层直播活动…

idea使用本地代码远程调试线上运行代码---linux环境

场景: 之前介绍过windows环境上,用idea进行远程调试那么在linux环境下实战一下 环境: linux 测试应用:使用docker部署的platform-multiappcenter-base-app-1.0.0-SNAPSHOT.jar 应用 测试应用端口:19001 测试工具&…

工欲善其事,必先利其器,分享5款Windows效率软件

工欲善其事,必先利其器。作为全球最多人使用的桌面操作系统,Windows 的使用效率与我们的工作学习息息相关。今天,小编就为大家整理了5款提高效率的利器,让你的 Windows 更具生产力。 1.桌面自定义——Rainmeter Rainmeter是一款…

快速部署私有云笔记,免费享受多端同步

一、老Q笔记之一路坎坷 市面上的笔记软件非常多,有些是本地编辑功能特别强大但是不支持云同步,有些是支持上云但是编辑功能不够完善。选择一款合适的云笔记软件,无疑能让我们工、学习的时候更加顺心、顺手。 这么多年来老Q使用过很多云笔记…

亚马逊云科技与CIT强强联手,因企制宜加速数字化进程

数字经济时代,数据逐渐成为企业重要的生产要素,并成为驱动生产力增长的助力。但数据的快速增长,也给企业带来了诸多挑战,如:企业将彻底改变内外部流程、数据量超越了传统数据库的管理能力等。 作为亚马逊云科技全球咨…

10、创建和管理表

文章目录1 基础知识1.1 一条数据存储的过程1.2 标识符命名规则1.3 MySQL中的数据类型2. 创建和管理数据库2.1 创建数据库2.2 使用数据库2.3 修改数据库2.4 删除数据库3. 创建表3.1 创建方式13.2 创建方式23.3 查看数据表结构4 修改表4.1 追加一个列4.2 修改一个列4.3 重命名一个…

yolov5使用

参考网址:https://zhuanlan.zhihu.com/p/501798155 源码下载及使用 release下载source及pt文件(yolov5s.pt) https://github.com/ultralytics/yolov5/tags https://github.com/ultralytics/yolov5/releases/tag/v5.0 安装yolov5训练所需的第…

433MHz无线通信--模块RXB90

1、接收模块RXB90简介 两个数据输出是联通的。 2、自定义一个编码解码规则 组数据为“0x88 0x03 0xBD 0xB6”。 3、发射模块 如何使用示波器得到捕捉一个周期的图像? 通过date引脚连接示波器CH1,以及示波器探针的接地端接芯片的GND,分…

初识C语言——函数

目录 一、库函数 二、自定义函数 三、函数的参数 四 、函数的调用 1 、传值调用 2 、传址调用 五、函数的嵌套调用和链式访问 六、函数的声明和定义 1 函数声明: 2 函数定义: 七、函数的递归与迭代 八、总结 一、库函数 库函数查询网站&#xff…

浅谈智慧城市管廊综合管理平台的建设

摘 要:随着智慧城市的发展,地下综合管廊的建设不断增多,建成后的管廊需要有科学合理的综合管理平台对其进行智能化管理。本文介绍了地下综合管廊的建设内容,从管廊智能化管理角度出发,在运用GIS、可视化、传感器、物联…

多线程服务器

设计一个客户端从服务器端获取时间的程序: 服务器端使用多线程的方式,当有客户端请求到达时,服务器将启动一个新线程为它返回当前的时间,服务完后线程自动销毁,服务器端会显示连接的次数。 客户端比较简单,…

MySQL安装手册

文章目录一、系统环境二、检查是否已安装三、安装步骤1、yum安装1.1、更新yum1.2、使用wget下载mysql yum源:1.3、添加 mysql yum 源:1.4、安装 yum 工具 yum-utils :1.5、查看可用的 mysql :1.6、查看所有的 mysql 版本1.7、使用指定版本MySQL1.8、查看当前启用的M…