java字节码文件

1.简述

    java语言具备一处编译,处处运行,该功能实现原理是基于class文件实现的,java格式文件通过编译后生成class文件,jvm加载class文件进行运行,无论什么格式的文件只要能编译成符合规范的class文件,那么就能够在jvm上运行。因此下面研究字节码文件格式。html

2.字节码文件格式

package com.xiayu.demo;

public class ClassFile {

    private int field;

    public void method(){
        String a = "test";
        String b = new String("b");
        System.out.println("method()");
    }
}

对应的字节码16进制显示java

image.png

字节码文件是由魔数,版本号,常量池,访问标志,类索引,父类索引,接口索引,字段表集合,方法,属性组成。jvm

  • 魔数: 4个字节,对应的是16进制的cafe babe,其是代表class文件的标志,class文件也能够经过class后缀来表示,但后缀能够修改,魔数在文件内容上代表该文件是class文件
  • 版本号:上图0000 0034,0000表明次版本号,0034表明主版本号(52),52对应1.8.
  • 常量池:常量池主要包含字面量和符号引用,字面量如文本字符串,final声明的变量等,符号引用主要是类和接口的全局限定名,字段的名称和描述符,方法的名称和描述符。如上图字节码文件中:0x0021(33)表明常量池中常量的数量,实际上只有32个常量。

    image.png

    常量池中的信息
    image.png工具

  • 访问标志 Access_flag
    声明class文件是类仍是接口,访问控制权限是public abstract 仍是protected等等。
    image.png
  • 类索引、父类索引和接口索引等
    image.png
  • 方法
     
    构造方法
     
    image.png
     
    method()方法
     

    image.png

上述仅仅为字节码的简要描述,更多能够参考官方文档或者使用java自带javap工具进行查看字节码文件内容.spa

3.字节码指令

来自3d

    字节码指令主要包含加载存储指令,运算指令、类型转换指令、对象建立与访问指令、操做数栈管理指令、控制转移指令、方法调用和返回指令、异常处理指令和同步指令等。code

相关文章
相关标签/搜索