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

相關文章
相關標籤/搜索