【深入理解】JVM学习笔记—字节码

本文详细探讨了Java字节码,它是Java跨平台的关键。通过分析字节码文件,我们了解了魔数、版本号、常量池等关键概念。常量池是Class文件的资源仓库,存储了方法、变量和常量信息。字节码的描述符规则描述了字段和方法的类型。此外,文章还讨论了JVM中的访问标志、字段表、方法表、异常处理和栈帧结构,以及符号引用与直接引用的转换过程。
摘要由CSDN通过智能技术生成

Java虚拟机不和包括java在内的任何语言绑定,它只与“Class”特定的二进制文件格式关联,Class文件中包含Java虚拟机指令集和符号表以及若干其他辅助信息。本文将以字节码的角度来研究Java虚拟机。

字节码

  • Java跨平台的原因是JVM不跨平台
  • 首先编写一个简单的java代码,一次为例进行讲解
  • 测试1
public class MyTest1{
   
    private int a=1;
    public int getA(){
   
        return a;
    }
    public void setA(int a){
   
        this.a=a;
    }
}

编译生成MyTest.class文件
使用反编译命令:javap MyTest ,对文件进行反编译,生成以下数据

Compiled from "A.java"
public class controller.A {
   
  public controller.A();
  public int getA();
  public void setA(int);
}

增加参数,使用反编译命令:javap -c MyTest,生成以下数据

Compiled from "A.java"
public class controller.A {
   
  public controller.A();
    Code:
       0: aload_0
       1: invokespecial #10                 // Method java/lang/Object."<init>":()V
       4: aload_0
       5: iconst_1
       6: putfield      #12                 // Field a:I
       9: return
  public int getA();
    Code:
       0: aload_0
       1: getfield      #12                 // Field a:I
       4: ireturn
  public void setA(int);
    Code:
       0: aload_0
       1: iload_1
       2: putfield      #12                 // Field a:I
       5: return
}

使用反编译命令:javap -verbose MyTest,生成以下数据

Classfile /D:/eclipse_new/workspace/springmvc/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值