专注于 JetBrains IDEA 全家桶,永久激活,教程
持续更新 PyCharm,IDEA,WebStorm,PhpStorm,DataGrip,RubyMine,CLion,AppCode 永久激活教程

jvm:java类文件结构(字节码文件的解析)

1、java虚拟机简介

不是只有java编译器才能完成java程序到字节码的编译过程

35_1.png

35_2.png

(2)定义

java二进制字节码的运行环境

(3)好处

一次编写,到处运行的基础

自动内存管理,垃圾回收功能,大大减轻了程序员的负担

数组下标越界检查

多态

(4)比较

35_3.png

2、字节码文件(.class)的组成内容

35_4.png

35_5.png

无符号数:就是数值

表:一个结构

3、常量池(主要存放字面量和符号引用)

(1)字面量

String string1="cunnuanhuakai";

字面量就是等或右边的值,即:cunnuanhuakai

(2)符号引用:包括三类常量

类和接口的全限定名:

pers.zhb.web.servlet.IndexServlet

字段的名称和描述符:

private、public等

方法的名称和描述符:

private、public等

4、在Notepad++中安装插件

(1)下载插件

(2)将下载的插件放到Notepad++安装目录的plunges目录下

(3)导入插件

35_6.png

(4)按8bit的方式查看class文件:

35_7.png

5、字节码文件的解析

(1)11种数据类型结构表:

35_8.png

35_9.png

图片来源:(https://blog.csdn.net/qq_39375211/article/details/79925127)

u1:一个字节

u2:两个字节… …

(2)字节码文件的解析(字节码文件为二进制,只是查看方便显示十六进制)

查看字节码文件(转换为16进制):

35_10.png

35_11.png

要进行解析需要将16进制转化为十进制,然后,对应结构表。

0a:十进制为10,对应表格中的Methodref,又由于索引项每一个占了两字节,因此,索引项分别为14和38

运行:javap -v 命令对解析结果进行验证:

35_12.png

程序源码:

public class Student {
    private String name;
    private Integer age;
    public Student(String name, Integer age) {
        this.name = name;
        this.age = age;
    }

    public void testPara(Student student1){
        student1.name="zhang";
    }

    public void testPara1(Student student2){
        student2=new Student("liu",11);
    }

    public static void main(String args[]){
        Student student=new Student("zhai",12);
        student.testPara(student);
        System.out.println(student.name);

        student.testPara1(student);
        System.out.println(student.name);
    }
}

(3)clinit与init:

35_13.png

clinit:所有的类变量初始化语句和静态初始化语句

init:调用new初始化对象的时候

调用反射的时候(newInstance())

调用clone方法的时候

序列化的时候

(4)虚拟机的执行过程

35_14.png

(5)访问标志:紧接着常量池之后的两个字节代表访问标志,用于识别类或接口的访问信息

文章永久链接:https://tech.souyunku.com/22610

未经允许不得转载:搜云库技术团队 » jvm:java类文件结构(字节码文件的解析)

JetBrains 全家桶,激活、破解、教程

提供 JetBrains 全家桶激活码、注册码、破解补丁下载及详细激活教程,支持 IntelliJ IDEA、PyCharm、WebStorm 等工具的永久激活。无论是破解教程,还是最新激活码,均可免费获得,帮助开发者解决常见激活问题,确保轻松破解并快速使用 JetBrains 软件。获取免费的破解补丁和激活码,快速解决激活难题,全面覆盖 2024/2025 版本!

联系我们联系我们