【JVM篇】分析并讲解字节码文件

news2025/1/22 21:37:57

文章目录

  • 🍔字节码文件
    • ⭐打开字节码文件的工具
    • ⭐字节码文件的组成
    • ✨具体分析

在这里插入图片描述

🍔字节码文件

字节码文件是一种中间表示形式,它通常由编译器将高级编程语言(如Java、Python等)源代码编译而成。字节码文件包含了程序的指令集,可以被解释器或虚拟机读取和执行。

对于Java语言而言,编译Java源代码后会生成字节码文件(以.class为扩展名),其中包含了Java虚拟机(JVM)可理解的指令集。字节码文件可以在不同的平台上运行,因为它们是跨平台的中间表示形式。JVM会将字节码文件加载到内存中,并逐条解释执行其中的指令。

字节码文件具有以下特点:

  • 它是一种中间表示形式,介于源代码和机器码之间。
  • 字节码文件可以在不同的平台上执行(需要安装相应的虚拟机)。
  • 它是面向对象编程语言(如Java)的典型编译结果。
  • 字节码文件可以进行优化和加密,以提高执行效率和保护代码安全性。

通过将源代码编译成字节码文件,可以实现代码的平台无关性,并提供更高层次的安全性和运行时的灵活性。

⭐打开字节码文件的工具

推荐使用jclasslib工具来查看字节码文件

官网:https://github.com/ingokegel/jclasslib/releases

下载下来进行安装即可
在这里插入图片描述

⭐字节码文件的组成

请添加图片描述

Java字节码文件的组成包括:

  • 魔数(Magic Number):4个字节,用于标识此文件是否是一个合法的字节码文件。

请添加图片描述

  • 版本号(Version Number):2个字节,用于指定字节码文件的版本号。高版本的JVM可能不支持低版本的字节码文件。

请添加图片描述

  • 常量池(Constant Pool):变长的数据结构,存储各种字面量和符号引用。包括类名、字段名、方法名、接口名、字符串常量等。
    请添加图片描述

  • 访问标志(Access Flags):2个字节,用于表示类或者接口的访问属性,如public、final、abstract等。

  • 类索引、父类索引和接口索引集合:各2个字节,用于描述类的继承关系和实现的接口。

  • 字段表集合(Field Table):变长的数据结构,用于描述类中定义的所有字段。

  • 方法表集合(Method Table):变长的数据结构,用于描述类中定义的所有方法。

请添加图片描述

请添加图片描述

请添加图片描述

  • 属性表集合(Attribute Table):变长的数据结构,用于描述类的附加信息,包括源代码文件名、注解等。

其中,常量池是字节码文件中最重要的部分之一,它包含了几乎所有的字面量和符号引用,并为虚拟机执行字节码提供了必要的信息。字段表集合和方法表集合则描述了类中定义的所有属性和方法,包括访问修饰符、名称和描述符等信息。属性表集合用于描述类的附加信息,如源代码文件名、注解等。

通过这些部分的组合,Java虚拟机可以读取和执行字节码文件中的指令,并最终完成程序的执行。

✨具体分析

我们分析一下下面这段代码的jvm执行过程

package org.example;

public class Demo1 {
    public static void main(String[] args) {
        int i=0;
        int j=i+1;
    }
}

在这里插入图片描述

首先找到字节码文件

在这里插入图片描述

使用上面提到的工具打开

在这里插入图片描述

下面我们来分析执行过程

  1. iconst_0:将常量值0压入操作数栈顶。此时操作数栈:[0]。
  2. istore_1:将操作数栈顶的值(0)存储到本地变量表中索引为1的位置(即变量 i )。此时本地变量表:[0, 0]。
  3. iload_1:将本地变量表中索引为1的值(即变量i的值)压入操作数栈顶。此时操作数栈:[0]。
  4. iconst_1:将常量值1压入操作数栈顶。此时操作数栈:[0, 1]。
  5. iadd:从操作数栈中弹出两个值(0和1),执行加法操作,并将结果(1)压入操作数栈顶。此时操作数栈:[1]。
  6. istore_2:将操作数栈顶的值(1)存储到本地变量表中索引为2的位置(即变量j)。此时本地变量表:[0, 0, 1]。
  7. return:方法执行完毕,返回。

在执行过程中,代码中定义的变量i和j分别被存储在本地变量表的索引1和索引2处。通过字节码指令对操作数栈和本地变量表的读写操作,实现了变量的赋值和运算。最终,方法执行完毕并返回。

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

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

相关文章

手把手教你开发Python桌面应用-PyQt6图书管理系统-图书信息删除实现

锋哥原创的PyQt6图书管理系统视频教程: PyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~_哔哩哔哩_bilibiliPyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~共计24条视频&…

【办公类-23-02】20240212徐迟《江南小镇(南浔古镇)》“水晶晶”和景物”数量提取66个

作品展示 背景需求: 2024年春节前夕,我与家人前往浙江湖州、南浔旅行。探寻母亲、外婆外公、曾外婆的祖籍南浔的风土人情。在古镇上看到了”著名诗人“徐迟”的介绍。 母亲说:我的姑母就是在南浔读了小学和中学,她小学时的老师就…

【剪映】什么样的音乐符合版权校验规则?

什么样的音乐符合版权校验规则? 您的模版中仅存在一首背景音乐,允许变速、裁剪处理。

【C语言】模拟实现库函数qsort

qsort的头文件是stdlib.h 他的四个参数分别是要进行排序的数组base的首地址,base数组的元素个数,每个元素的大小,以及一个函数指针,这个函数指针指向了一个函数,这个函数的参数是两个void*类型的指针,返回类…

《Linux 简易速速上手小册》第9章: 备份与恢复策略(2024 最新版)

文章目录 9.1 理解备份的重要性9.1.1 重点基础知识9.1.2 重点案例:数据中心遭受火灾9.1.3 拓展案例:个人电脑硬盘故障9.1.4 企业级数据库被恶意软件加密 9.2 实施备份策略9.2.1 重点基础知识9.2.2 重点案例:为中小企业实施备份策略9.2.3 拓展…

算法学习——LeetCode力扣二叉树篇5

算法学习——LeetCode力扣二叉树篇5 513. 找树左下角的值 513. 找树左下角的值 - 力扣(LeetCode) 描述 给定一个二叉树的 根节点 root,请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至少有一个节点。 示例 示例 1: 输入: r…

mac无法往硬盘里存东西 Mac硬盘读不出来怎么办 Mac硬盘格式 硬盘检测工具

mac有时候会出现一些问题,比如无法往硬盘里存东西,或者无法往硬盘上拷贝文件。这些问题会给用户带来很大的困扰,影响正常的工作和学习。那么,mac无法往硬盘里存东西,mac无法往硬盘上拷贝怎么办呢?软妹子将为…

【C++】类的隐式类型转换

文章目录 前言一、隐式类型转换二、explicit关键字总结 前言 一、隐式类型转换 C 类的隐式类型转换是指当一个类定义了适当的构造函数或转换函数时,可以在需要时自动进行类型转换,而无需显式调用转换函数或构造函数。这使得代码更具灵活性和简洁性。下面…

基于RBF神经网络的自适应控制器simulink建模与仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 4.1自适应控制器 4.2 RBF神经网络模型 5.完整程序 1.程序功能描述 在simulink中,使用S函数编写基于RBF神经网络的自适应控制器,然后实现基于RBF神经网络的自适应控制…

Linux下的自动化任务与计划任务:让你的系统更智能

在日常的Linux系统管理中,你是否经常需要定时执行某些任务,或者希望在系统启动时自动运行某些脚本?如果是的话,那么自动化任务和计划任务将是你的得力助手。它们可以帮助你提高系统效率、减少人工干预,并确保任务能够按…

OCP使用CLI创建和构建应用

文章目录 环境登录创建project赋予查看权限部署第一个image创建route检查pod扩展应用 部署一个Python应用连接数据库创建secret加载数据并显示国家公园地图 清理参考 环境 RHEL 9.3Red Hat OpenShift Local 2.32 登录 通过 crc console --credentials 可以查看登录信息&…

MyBatis篇----第二篇

系列文章目录 文章目录 系列文章目录前言一、MyBatis 框架适用场合二、MyBatis 与 Hibernate 有哪些不同?三、#{}和${}的区别是什么?四、当实体类中的属性名和表中的字段名不一样 ,怎么办?前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一…

WordPress修改所有用户名并发送邮件通知的插件Easy Username Updater

前面跟大家介绍了『如何修改WordPress后台管理员用户名?推荐2种简单方法』一文,但是对于有很多用户的站长来说,操作有点复杂,而且无法发邮件通知对方,所以今天boke112百科向大家推荐一款可以直接在WordPress后台修改所…

数模.微分方程

或者可以建立一个是实时脚本,也可以转化成上图公式 solver只是一个代名词,代表的是后面七种函数的名字 百分之九十用ode45函数 注意df1是在另外一个文件里面 计算导弹追击问题没有记录,去文件找代码

拼写检查应用程序:基于词典编辑的解释

一、说明 拼写检查器项目涉及创建一个可以自动检测并纠正给定文本中的拼写错误的程序。此类项目在各种应用程序中非常有用,例如文字处理器、电子邮件客户端和网络浏览器,可确保用户生成的文本没有拼写错误。 您可以找到我创建的拼写检查器应用程序&#…

数据结构哈希表

这里个大家用数组来模拟哈希表 法一&#xff1a;拉链法 法二&#xff1a;开放寻址法 /** Project: 11_哈希表* File Created:Sunday, January 17th 2021, 2:11:23 pm* Author: Bug-Free* Problem:AcWing 840. 模拟散列表 拉链法*/ #include <cstring> #include <iostr…

分享84个jQuery特效,总有一款适合您

分享84个jQuery特效&#xff0c;总有一款适合您 84个jQuery特效下载链接&#xff1a;https://pan.baidu.com/s/1P9fmHWRdaCRMXr3H9sNA1A?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理…

鸿蒙系统进一步学习(一):学习资料总结,少走弯路

随着鸿蒙Next的计划越来越近&#xff0c;笔者之前的鸿蒙系统扫盲系列中&#xff0c;有很多朋友给我留言&#xff0c;不同的角度的问了一些问题&#xff0c;我明显感觉到一点&#xff0c;那就是许多人参与鸿蒙开发&#xff0c;但是又不知道从哪里下手&#xff0c;因为资料太多&a…

<网络安全>《28 常用安全标准》

《常用安全标准》 1 个人信息安全 o《信息安全技术 个人信息安全规范》&#xff08;GB/T35273-2017) o《信息安全技术 个人信息去标识化指南》&#xff08;GB/T37964-2019) 2 工业控制安全 o《信息安全技术 工业控制系统安全检查指南》&#xff08;GB/T 37980-2019) o《信息…

STM32 SYSTick高精度延时功能代码实现

文章目录 前言一、SYSTick定时器介绍二、SYSTick定时器和其他定时器的区别三、SYSTick定时器框图讲解四、HAL库中SYSTick配置代码讲解五、SYSTick实现高精度延时总结 前言 本篇文章将给大家讲解一下SYSTICK滴答定时器&#xff0c;以及讲解使用滴答定时器来实现高精度延时功能的…