日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【Java 虚拟机原理】Class 字节码二进制文件分析 一 ( 字节码文件附加信息 | 魔数 | 次版本号 | 主版本号 | 常量池个数 )

發布時間:2025/6/17 java 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java 虚拟机原理】Class 字节码二进制文件分析 一 ( 字节码文件附加信息 | 魔数 | 次版本号 | 主版本号 | 常量池个数 ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、字節碼文件 與 JVM
  • 二、字節碼文件示例
  • 三、字節碼文件二進制結構分析
    • 1、魔數
    • 2、次版本號
    • 3、主版本號
    • 4、常量池個數





一、字節碼文件 與 JVM



Java 源碼編譯成 Class 字節碼 ;

Java 虛擬機 可以被認為是一個 解釋器 , 解釋編譯后的 Class 字節碼文件 , 最后在不同的操作系統中運行 ;

Android 虛擬機 不是 Java 規范的 虛擬機 , 有一些根據嵌入式設備進行的定制的實現 ;


Class 字節碼 本質上就是 二進制數據 , 運行時 , 會被 類加載器 加載到 Java 虛擬機內存的 方法區 中 ; 同時 創建 Class 對象 ;
( Java 虛擬機內存分為 : 堆區 , 方法區 , 棧 , 本地方法棧 , 程序計數器 )

由于要將 Class 字節碼文件 加載到 JVM 內存的 方法區 中 , 要占用一定的內存空間 , 這里要求 Class 字節碼文件 , 越小越好 ;





二、字節碼文件示例



Java 源代碼如下 :

public class Student {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;} }

使用 javac 命令將 Student.java 源碼編譯成 Student.class字節碼文件 :

javac Student.java

字節碼文件二進制數據分析 :

使用二進制查看工具查看 Student.class 字節碼文件 , 這些二進制數值對應的就是 JVM 指令 ;

CA FE BA BE 00 00 00 34 00 15 0A 00 04 00 11 09 00 03 00 12 07 00 13 07 00 14 01 00 04 6E 61 6D 65 01 00 12 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B 01 00 06 3C 69 6E 69 74 3E 01 00 03 28 29 56 01 00 04 43 6F 64 65 01 00 0F 4C 69 6E 65 4E 75 6D 62 65 72 54 61 62 6C 65 01 00 07 67 65 74 4E 61 6D 65 01 00 14 28 29 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B 01 00 07 73 65 74 4E 61 6D 65 01 00 15 28 4C 6A 61 76 61 2F 6C 61 6E 67 2F 53 74 72 69 6E 67 3B 29 56 01 00 0A 53 6F 75 72 63 65 46 69 6C 65 01 00 0C 53 74 75 64 65 6E 74 2E 6A 61 76 61 0C 00 07 00 08 0C 00 05 00 06 01 00 07 53 74 75 64 65 6E 74 01 00 10 6A 61 76 61 2F 6C 61 6E 67 2F 4F 62 6A 65 63 74 00 21 00 03 00 04 00 00 00 01 00 02 00 05 00 06 00 00 00 03 00 01 00 07 00 08 00 01 00 09 00 00 00 1D 00 01 00 01 00 00 00 05 2A B7 00 01 B1 00 00 00 01 00 0A 00 00 00 06 00 01 00 00 00 01 00 01 00 0B 00 0C 00 01 00 09 00 00 00 1D 00 01 00 01 00 00 00 05 2A B4 00 02 B0 00 00 00 01 00 0A 00 00 00 06 00 01 00 00 00 05 00 01 00 0D 00 0E 00 01 00 09 00 00 00 22 00 02 00 02 00 00 00 06 2A 2B B5 00 02 B1 00 00 00 01 00 0A 00 00 00 0A 00 02 00 00 00 09 00 05 00 0A 00 01 00 0F 00 00 00 02 00 10

使用

javap -v Student.class

命令 , 生成上述字節碼文件的 附加信息 ;


命令行輸出 :

D:\jvm>javap -v Student.class Classfile /D:/jvm/Student.classLast modified 2021-9-4; size 392 bytesMD5 checksum 8b9bb897bb8cf2a8addf04be5b7b915fCompiled from "Student.java" public class Studentminor version: 0major version: 52flags: ACC_PUBLIC, ACC_SUPER Constant pool:#1 = Methodref #4.#17 // java/lang/Object."<init>":()V#2 = Fieldref #3.#18 // Student.name:Ljava/lang/String;#3 = Class #19 // Student#4 = Class #20 // java/lang/Object#5 = Utf8 name#6 = Utf8 Ljava/lang/String;#7 = Utf8 <init>#8 = Utf8 ()V#9 = Utf8 Code#10 = Utf8 LineNumberTable#11 = Utf8 getName#12 = Utf8 ()Ljava/lang/String;#13 = Utf8 setName#14 = Utf8 (Ljava/lang/String;)V#15 = Utf8 SourceFile#16 = Utf8 Student.java#17 = NameAndType #7:#8 // "<init>":()V#18 = NameAndType #5:#6 // name:Ljava/lang/String;#19 = Utf8 Student#20 = Utf8 java/lang/Object {public Student();descriptor: ()Vflags: ACC_PUBLICCode:stack=1, locals=1, args_size=10: aload_01: invokespecial #1 // Method java/lang/Object."<init>":()V4: returnLineNumberTable:line 1: 0public java.lang.String getName();descriptor: ()Ljava/lang/String;flags: ACC_PUBLICCode:stack=1, locals=1, args_size=10: aload_01: getfield #2 // Field name:Ljava/lang/String;4: areturnLineNumberTable:line 5: 0public void setName(java.lang.String);descriptor: (Ljava/lang/String;)Vflags: ACC_PUBLICCode:stack=2, locals=2, args_size=20: aload_01: aload_12: putfield #2 // Field name:Ljava/lang/String;5: returnLineNumberTable:line 9: 0line 10: 5 } SourceFile: "Student.java"

下面開始逐個字節解析上述字節碼文件 ;





三、字節碼文件二進制結構分析



分析字節碼二進制文件時 , 可以參考 javap -v Student.class 命令輸出的字節碼附加信息進行理解 ;


1、魔數


magic ( 魔數 ) : 444 字節 , CA FE BA BE , 所有的 Class 字節碼都是以 CafeBabe 信息開頭的 ;


2、次版本號


minor_version ( 次版本號 ) : 222 字節 , 00 00 , 次版本號是 000 ; 對應字節碼附加信息中的 minor version: 0 ;


3、主版本號


major_version ( 主版本號 ) : 222 字節 , 00 34 , 主版本號是 525252 ; 對應字節碼附加信息中的 major version: 52 ;

  • 這個主版本號 525252 對應 JDK 版本的 1.81.81.8 版本 ;
  • 515151 對應 1.71.71.7 ;
  • 535353 對應 1.91.91.9 ;
  • 454545 對應 1.01.01.0 ;


4、常量池個數


constant_pool_count ( 常量池個數 ) : 222 字節 , 00 15 , 常量池個數是 212121 個 ; 由于 JVM 占用了默認的常量池 #0 , 因此實際上的常量個數是 21?121 - 121?1 個 , 需要對這個數減一處理 ;

字節碼附加信息中 常量池參考 , 有 202020 個常量池 ; #0 常量池 , 被 JVM 占用了 , 代表了一個空引用 , 不指向任何位置 ;

Constant pool:#1 = Methodref #4.#17 // java/lang/Object."<init>":()V#2 = Fieldref #3.#18 // Student.name:Ljava/lang/String;#3 = Class #19 // Student#4 = Class #20 // java/lang/Object#5 = Utf8 name#6 = Utf8 Ljava/lang/String;#7 = Utf8 <init>#8 = Utf8 ()V#9 = Utf8 Code#10 = Utf8 LineNumberTable#11 = Utf8 getName#12 = Utf8 ()Ljava/lang/String;#13 = Utf8 setName#14 = Utf8 (Ljava/lang/String;)V#15 = Utf8 SourceFile#16 = Utf8 Student.java#17 = NameAndType #7:#8 // "<init>":()V#18 = NameAndType #5:#6 // name:Ljava/lang/String;#19 = Utf8 Student#20 = Utf8 java/lang/Object

總結

以上是生活随笔為你收集整理的【Java 虚拟机原理】Class 字节码二进制文件分析 一 ( 字节码文件附加信息 | 魔数 | 次版本号 | 主版本号 | 常量池个数 )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 色一情一乱一伦 | 国产91网址| 亚洲成人777 | 亚洲精品无人区 | 日本欧美日韩 | 自拍偷拍中文字幕 | 亚洲污污视频 | 成人在线观看你懂的 | 免费黄色视屏 | 中文字幕日韩精品亚洲一区小树林 | 五月天婷婷久久 | 精品一区二区三区四区五区 | 啪啪免费小视频 | 色婷婷aⅴ一区二区三区 | 色婷婷中文 | 诱夫1v1高h | 精品乱码一区二区三区 | 深夜福利麻豆 | 亚洲av无码国产精品永久一区 | 四虎首页 | 中文字幕一区二区三区日韩精品 | 成人不卡 | 亚洲国产精品毛片av不卡在线 | 亚洲欧洲精品一区二区三区 | 丁香婷婷综合激情 | 网友自拍av | 女生张开腿让男生插 | 色播视频在线播放 | 国产精品久久久久久精 | 污视频网址在线观看 | av影视天堂 | 国产伦精品一区二区. | av在线专区 | 亚洲欧美日韩精品久久亚洲区 | 999精彩视频 | 丁香啪啪综合成人亚洲 | 成人先锋av | 精品少妇一二三区 | 东北高大丰满bbbbzbbb | 蜜桃久久久 | 19禁大尺度做爰无遮挡电影 | 久久免费小视频 | juliaann第一次和老师 | 欧美日一区二区 | 在线看国产视频 | 本道综合精品 | 日韩久久久久久久久久 | 色av色| 色婷婷国产精品久久包臀 | 视频国产一区 | 日鲁鲁 | 少妇xxxx | 欧美先锋影音 | 精品一区中文字幕 | 99热热| 成人做受视频试看60秒 | 69视频一区二区 | 国产美女av在线 | 一区二区三区四区精品 | 日韩av无码一区二区三区不卡 | 手机免费看av片 | 成 年人 黄 色 片 | 少妇人妻互换不带套 | 欧美a免费 | 久草新| 五月天开心网 | 日韩欧美一区视频 | 亚洲国产97在线精品一区 | 亚洲最大在线视频 | 亚洲精品一区二区18漫画 | 麻豆精品在线 | 国产伦精品一区二区三区视频网站 | 美女扒开屁股让男人桶 | 五月天婷婷在线播放 | 成人精品免费网站 | 亚洲乱码国产乱码精品精的特点 | 一级视频在线观看 | 国精产品一区一区三区免费视频 | 久久综合精品视频 | 亚洲性久久久 | 成人做爰69片免费观看 | 天天综合在线视频 | 免费看欧美一级特黄a大片 国产免费的av | 91香蕉视频在线观看免费 | 69久久精品无码一区二区 | 男女日皮视频 | 久久久成人网 | 精品国产一区二区三区在线 | 亚洲情侣在线 | 亚洲在线观看免费 | 日韩精品视频观看 | 日韩欧美一区二区视频 | 中文天堂在线资源 | 久久久久97| 在线看黄网 | 国产精品美女www | 日韩成人av影院 | 国产精品久久久久久白浆 | 亚洲国产av一区二区 |