JVM系列-2.字节码文件详解

这篇具有很好参考价值的文章主要介绍了JVM系列-2.字节码文件详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  • 👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家
  • 📕系列专栏:Spring原理、JUC原理、Kafka原理、分布式技术原理、数据库技术、JVM原理
  • 🔥如果感觉博主的文章还不错的话,请👍三连支持👍一下博主哦
  • 🍂博主正在努力完成2023计划中:源码溯源,一探究竟
  • 📝联系方式:nhs19990716,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬👀

字节码文件详解

JVM的组成

JVM系列-2.字节码文件详解,JVM,jvm,java

JVM系列-2.字节码文件详解,JVM,jvm,java

字节码文件的组成

学习字节码文件有什么用呢?

JVM系列-2.字节码文件详解,JVM,jvm,java

能够从字节指令的角度去回答疑难杂症的面试题。

其他的应用场景呢?

JVM系列-2.字节码文件详解,JVM,jvm,java

JVM系列-2.字节码文件详解,JVM,jvm,java

以正确的姿势打开文件

字节码文件中保存了源代码编译之后的内容,以二进制的方式存储,无法直接用记事本打开阅读。

通过NotePad++使用十六进制插件查看class文件:

JVM系列-2.字节码文件详解,JVM,jvm,java

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

在github下载之后打开

JVM系列-2.字节码文件详解,JVM,jvm,java

JVM系列-2.字节码文件详解,JVM,jvm,java

接下来简单分析下字节码中的信息。

JVM系列-2.字节码文件详解,JVM,jvm,java

JVM系列-2.字节码文件详解,JVM,jvm,java

JVM系列-2.字节码文件详解,JVM,jvm,java

JVM系列-2.字节码文件详解,JVM,jvm,java

详细的看一下里面的字节码指令

JVM系列-2.字节码文件详解,JVM,jvm,java

JVM系列-2.字节码文件详解,JVM,jvm,java

字节码文件的组成

JVM系列-2.字节码文件详解,JVM,jvm,java

字节码文件的组成部分-Magic魔数

JVM系列-2.字节码文件详解,JVM,jvm,java

文件是无法通过文件扩展名来确定文件类型的,文件扩展名可以随意修改,不影响文件的内容。

软件使用文件的头几个字节(文件头)去校验文件的类型,如果软件不支持该种类型就会出错。

Java字节码文件中,将文件头称为magic魔数。

JVM系列-2.字节码文件详解,JVM,jvm,java

字节码文件的组成部分-主副版本号

JVM系列-2.字节码文件详解,JVM,jvm,java

主版本号不兼容导致的错误

需求:

解决以下由于主版本号不兼容导致的错误

JVM系列-2.字节码文件详解,JVM,jvm,java

两种方案:

1.升级JDK版本

2.将第三方依赖的版本号降低或者更换依赖,以满足JDK版本的要求
(容易引发其他的兼容性问题,并且需要大量的测试)√ 建议采用

JVM系列-2.字节码文件详解,JVM,jvm,java

字节码文件的组成部分-常量池

字节码文件中常量池的作用:避免相同的内容重复定义,节省空间。

JVM系列-2.字节码文件详解,JVM,jvm,java

常量池中的数据都有一个编号,编号从1开始。在字段或者字节码指令中通过编号可以快速的找到对应的数据。

JVM系列-2.字节码文件详解,JVM,jvm,java

字节码指令中通过编号引用到常量池的过程称之为符号引用。

JVM系列-2.字节码文件详解,JVM,jvm,java

字节码文件的组成部分-方法

一个非常有意思的面试题:

JVM系列-2.字节码文件详解,JVM,jvm,java

字节码中的方法区域是存放字节码指令的核心位置,字节码指令的内容存放在方法的Code属性中。

JVM系列-2.字节码文件详解,JVM,jvm,java

操作数栈是临时存放数据的地方,局部变量表是存放方法中的局部变量的位置。

JVM系列-2.字节码文件详解,JVM,jvm,java

i=i++的执行流程:

JVM系列-2.字节码文件详解,JVM,jvm,java

i=++i的执行流程:

JVM系列-2.字节码文件详解,JVM,jvm,java

通过分析方法中的字节码指令,我们成功的解决了这个问题

JVM系列-2.字节码文件详解,JVM,jvm,java

字节码文件常用工具

玩转字节码常用工具: javap -v命令

javap是JDK自带的反编译工具,可以通过控制台查看字节码文件的内容。适合在服务器上查看字节码文件内容。

直接输入javap查看所有参数。

输入javap -v 字节码文件名称 查看具体的字节码信息。(如果jar包需要先使用 jar –xvf 命令解压

JVM系列-2.字节码文件详解,JVM,jvm,java

例如:javap -v /opt/jvm/BOOT-INF/classes/com/itheima/springbootclassfile/pojo/vo/UserVo.class > /opt/jvm

玩转字节码常用工具: jclasslib插件

jclasslib也有Idea插件版本,建议开发时使用Idea插件版本,可以在代码编译之后实时看到字节码文件内容。

JVM系列-2.字节码文件详解,JVM,jvm,java

需要将该文件从服务器上下载下来才能使用jclasslib

玩转字节码常用工具: 阿里arthas

Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,大大提升线上问题排查效率。

JVM系列-2.字节码文件详解,JVM,jvm,java

下载好的atheas是一个jar,通过 java -jar arthas.jar 启动

JVM系列-2.字节码文件详解,JVM,jvm,java

输入5就可以进入到对应的程序中

JVM系列-2.字节码文件详解,JVM,jvm,java

其中arthas包含了很多功能

JVM系列-2.字节码文件详解,JVM,jvm,java

dump 类的全限定名:dump已加载类的字节码文件到特定目录。

jad 类的全限定名: 反编译已加载类的源码。

使用阿里arthas定位线上出现的字节码问题

背景:
小李的团队昨天对系统进行了升级修复了某个bug,但是升级完之后发现bug还是存在,小李怀疑是因为没有把最新的字节码文件部署到服务器上,请使用阿里的arthas去确认升级完的字节码文件是不是最新的。

思路:文章来源地址https://www.toymoban.com/news/detail-814892.html

  1. 在出问题的服务器上部署一个 arthas,并启动。
  2. 连接 arthas的控制台,使用 jad命令加上想要查看的类名,反编译出源码。
  3. 确认源码是否是最新的。

到了这里,关于JVM系列-2.字节码文件详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【JVM】字节码文件的组成

    1. 魔数与Class文件版本  魔数是一个用于校验字节码文件是否有效的标识,位于文件开头的前四个字节,魔数之后是次版本号和主版本号,共同构成了字节码文件的版本号。 2.常量池 常量池是字节码文件中的一个结构,包含了该类的所有常量,如数字,字符串,符号常量等。

    2024年02月02日
    浏览(30)
  • 【JVM】字节码文件的组成部分

    🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 Redis 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 操作数栈是临时存放数据的地方 局部变量表是存放方法中的局部变量的位置 观察如下代码的字节码文件 具体的java源代码: 要想看到java的字

    2024年02月08日
    浏览(29)
  • 一、认识 JVM 规范(JVM 概述、字节码指令集、Class文件解析、ASM)

    JVM : Java Virtual Machine ,也就是 Java 虚拟机 所谓虚拟机是指:通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的计算机系统。 即:虚拟机是一个计算机系统。这种计算机系统运行在完全隔离的环境中,且它的硬件系统功能是通过软件模拟出来的。 JVM 通

    2024年01月23日
    浏览(35)
  • 【Java基础】- JVM之Dump文件详解

    学习Jvm调优,我们会接触到Dump文件。什么是Dump文件、Dump文件是如何得到的。当程序崩溃时,如何从Dump文件还原崩溃时的信息。本文讲重点讲解。 Thread Dump是非常有用的诊断Java应用问题的工具。每一个Java虚拟机都有及时生成所有线程在某一个点状态的thread-dump的能力,虽然

    2024年02月13日
    浏览(30)
  • JVM——类加载与字节码技术—类文件结构

      由源文件被编译成字节码文件,然后经过类加载器进行类加载,了解类加载的各个阶段,了解有哪些类加载器,加载到虚拟机中执行字节码指令,执行时使用解释器进行解释执行,解释时对热点代码进行运行期的编译处理。    根据下面规范,魔数,两个版本,常量池信息

    2024年02月11日
    浏览(26)
  • 【Java高级应用:深入探索Java编程的强大功能,JVM 类加载机制, JVM 内存模型,垃圾回收机制,JVM 字节码执行,异常处理机制】

    本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题 中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:

    2024年01月16日
    浏览(73)
  • 【JVM001】宋红康JVM字节码举例

    1 Integer 说明: 1 String package jvmT; 说明: 1 Object 执行结果: 说明: (1)成员变量(非静态)赋值过程:①默认初始化—②显示初始化/代码块中初始化—③构造器中初始化—④有了对象之后可以f.x或者f.method()设置属性值 (2)方法有多态,属性没有多态 main方法的字节码文件

    2024年02月06日
    浏览(22)
  • 面试系列 - JVM内存模型和调优详解

    目录 一、JVM内存模型 1. 程序计数器(Program Counter Register): 2.Java虚拟机栈(Java Virtual Machine Stacks): 3. 本地方法栈(Native Method Stack): 5. 方法区(Method Area): 6. 运行时常量池(Runtime Constant Pool): 7. 直接内存(Direct Memory): 二、垃圾回收期CMS和G1区别 1. 工作原理:

    2024年02月10日
    浏览(33)
  • 【JVM调优系列】如何导出堆内存文件

    💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老 导航 檀越剑指大厂系列:全面总

    2024年01月17日
    浏览(33)
  • JVM——类加载与字节码技术—字节码指令

    jvm的解释器可以识别平台无关的字节码指令,解释为机器码执行。      2a b7  00 01  b1 this .    init() return   准备了System.out对象,准备了参数“hello world”,准备了对象的方法println(String)V,并return 这里常量池直接把查询结果放在了右边。  有了javap,终于不用看那狗屎字节码

    2024年02月11日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包