class文件 字节码指令

news/2025/3/18 11:37:41/文章来源:https://www.cnblogs.com/xiaoxianglu/p/18778614

字节码指令:

  • short范围的整数是跟字节码存储在一起;

  • 超过short整数范围,则会存储在运行时常量池中;

    • 将byte的数据压入操作数栈,int是4个字节,所以剩下的3个字节,会补齐,正数补0,负数1;
    • 同理shrot也是,这里的byte 和short都是从方法区的压入的操作数栈,
    • int和long是从常量池压入栈,而且long是8字节,会压入两次;
  • 常量池主要存储字节码中的常量池;

  • 方法区的字节码,主要放入方法区;

    • 字节码方法的执行是,先准备好对象 + 参数,在调用方法;
  • 栈帧内:存放局部变量+ 操作数栈【存储字节码指令和数据】;

  • 注意 a++字节码执行指令:

    • iinc指令直接在局部变量slot【槽】上进行运算;
    • a++和++a的区别是先执行 iload还是先执行iinc;
    • 字节码中,操作数栈是四字节,byte,short,char都会按照int作比较;
    • goto:用来跳转指定行号的字节码;
  • 代码的构造器方法:

    • void cinit():会按照从上至下的顺序收集所有static静态代码块和静态成员复制的代码,合并成为一个特殊的方法:cinit();
    • void init():会按照从上至下的顺序,收集所有{}代码块和成员变量赋值的代码,形成新的构造方法,但原始构造方法内的代码总是在最后执行;
    • 在对属性的操作中,是先获取对象的this,通过this获取对象的属性,从而进行赋值;
    • 类变量存在先赋值,再声明的情况:
      • java编译器在处理类时,会将所有成员变量的声明(不包括初始化赋值)提升到类作用域的顶部。
  • 方法调用:

    • invokespecial:构造方法,私有方法,final方法;

    • invokevirtual:public普通方法,存在重写,动态绑定;

    • invokestatic:静态方法,

      其中,invokespecial 和 invokestatic 在编译阶段就能确定所有调用的方法;

      • 静态方法通过对象调用的时候,会首先加载this对象,然后pop()它;
    • 多态原理:

      • 对象内部存在一个vtable表,在类的加载阶段就会生成,用来记录;
        1. 通过栈帧中的对象引用,找到对象,
        2. 分析对象头【16字节:前8是hash码和锁标记】,找到对象的实际Class【后8字节】;
        3. 在Class结构中由vtbale,他是在类加载的链接阶段,根据方法的重写规则生成好的;
        4. 根据表查找到方法的具体地址;
        5. 执行方法的字节码;
    • new关键字:

      • 首先在堆中,开辟对象空间,并返回引用地址;
      • 然后复制一份引用地址,之后利用操作数栈顶调用构造器方法,结束后pop()栈顶;
      • 最后将操作数栈的另一份地址赋值给对象变量slot【槽】;

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

这款流行 AI 工具被盗用挖取加密货币,这些隐患你需要知道

OneAPI 是在开源代码托管平台 GitHub 上拥有 2万 Star 的 AI 网关工具,该工具的用户发现安装最新版本镜像后,会固定消耗一定比例的 CPU 。事情经过 OneAPI 是在开源代码托管平台 GitHub 上拥有 2万 Star 的 AI 网关工具,该工具的用户发现安装最新版本镜像后,会固定消耗一定…

ProfiNet转DeviceNet实现Festo阀岛数据批量接入西门子TIA Portal系统

一、案例背景 在汽车零部件制造行业,随着市场竞争的加剧,企业对生产效率和产品质量的要求不断提高。某汽车零部件制造企业主要生产发动机缸体、变速器齿轮等关键零部件,其生产线涉及大量的自动化装配和检测工序。在原有的生产系统中,为实现精确的气动控制,采用了Festo品牌…

013 登录页-Panel中间tabs切换

现在我们来搭建中间这个 可以看到效果 左右都有选项目录,看这里

树上前缀和

树上前缀和 题目链接 多次询问树上的一些路径的权值和点前缀和 \(s[i]\)代表从根节点到节点\(i\)的点权和 先自顶向下计算出前缀和\(s[i]\),然后利用前缀和拼凑\((x, y)\)的路径和 \(s[x] + s[y] - s[lca] - s[fa[lca]]\)边前缀和 \(s[i]\)代表从根节点到节点\(i\)的边权和 先…

Matlab深度学习ResNet、迁移学习多标签图像分类及超分辨率处理Grad CAM可视化分析COCO、手写数字数据集

全文链接:https://tecdat.cn/?p=40982 在当今数字化时代,图像分类和图像超分辨率处理是计算机视觉领域的重要研究方向。深度学习技术的发展为解决这些问题提供了强大的工具。本文将详细介绍如何使用Matlab构建多标签图像分类模型和图像到图像的回归网络,以实现图像超分辨率…

2025年Manus、Deepseek通用AI智能体技术发展报告70+份汇总解读|附PDF下载

原文链接:https://tecdat.cn/?p=41001 随着人工智能技术从对话交互向任务执行跃迁,通用型AI智能体(Agent)成为重塑生产力的核心载体。本报告深度剖析全球首款通用AI智能体Manus的技术架构、市场表现及行业影响,揭示其如何通过自主决策能力突破传统AI的边界,并为企业与开…

2024全球财务采用AI报告60+份汇总解读|附PDF下载

原文链接:https://tecdat.cn/?p=40915 人工智能技术正以颠覆性力量重塑全球财务职能,德勤最新研究显示,财务AI市场规模预计2025年将突破120亿美元,年复合增长率达28%。本报告汇总解读基于《KPMG国际:2024全球财务采用AI报告》及文末68份行业研究报告的数据,报告合集已分…

C语言01

1、按f7后f5,打开程序看运行到哪,再打开寄存器窗口和内存窗口 shift➕f结束 二.c语言格式 三.函数的反汇编分析 1.空函数 例:编写一个空函数,没参数也没返回值,分析函数f7,f5后右键反汇编从call开始写再f11打开进函数里面,有jmp 再f11跳转jmp到0040D6F0,开栈(即提升堆…

虚幻unreal4.27源码编译编辑器流程与问题汇总

当你使用的是源码编译的虚幻unreal编辑器https://github.com/orgs/EpicGames/teams/developers搜索到你想要的版本对应的分支,并进入切换或者从这里下载稳定发布版。(注意下载4.27.2压缩包可能才380+M,解压后要113G+,所以最好预留空间120G) 在这里键入cmdH:\UnrealEngine-…

安装并运行Cloudreve个人网盘:详细步骤指南

安装并运行Cloudreve个人网盘:详细步骤指南 在本文中,我们将指导您如何安装并运行Cloudreve个人网盘,以及如何将其与阿里云OSS集成,实现高效的文件存储和管理。 步骤 1: 下载Cloudreve安装包 首先,您需要下载Cloudreve的安装包。请在您的Linux终端中执行以下命令: bash复…

算法心得(4)**快速排序和归并排序**

我们这里讨论的排序是把数组元素排成从小到大的顺序(升序) **快速排序** 先直接上模板: /***************** function:对数组进行快速排序* para:q[](待排序数组),l(数组左边界),r(数组右边界)* return:void*/ void fastSort(long long q[], int l, int r) {if (l >= r…