最通俗易懂的JAVA虚拟机类加载过程详解,看完还不懂你考虑转行吧!

前言

当程序使用某个类时,如果该类还未被加载到内存中,则JVM会通过加载、链接、初始化三个步骤对该类进行类加载。

Java Class文件

class文件是一组以8位字节为基础的二进制流,各个数据项目按照顺序排列在class文件中,中间没有任何分隔符。因此整个 class 文件中存储的内容几乎全是程序运行时的必要数据。当遇到需要占用8位以上字节空间的数据项时,会按照高位在前的方式分割成若干个8位字节存储。

分享一张JVM知识图谱:(关注我分享更多干货喔下↓↓↓)
在这里插入图片描述

我们首先需要定义一个Java类:

public class SumDemo {
    public static void main(String[] args) {
        int a=1;
        int b=2;
        System.out.println(a+b);
    }
}
1.2.3.4.5.6.7.8.

我们知道编写的Java代码是不能直接运行的,需要变成class文件才行。这个编译。需要用JDK内置的Java对命令就可以实现了。

比如,我们生成某一个类的字节码文件,只需要使用javac SumDemo.java 即可以获得一个 class 文件。当然了,在实际项目中,我们一般都不会人工用 javac 命令去编译,而是借助 IDE 或者是 Maven、Grande 等等工具,帮助我们更加方便的把 Java 代码编译成class文件。

编译出来的class文件并不是一个文本文件,它是没有办法直接打开阅读的,比如我们使用notepad++打开,可以发现是一片乱码。

那么如果想要阅读的话,可以使用 java p 命令反编译一下。这是一个 Java 内置的反编译工具,我们来看看怎么用。

如下图所示:

下面是使用 javap -v -p 反编译生成的文件。注意的是,在这个时候不需要跟上 .java,因为反编译的是 class 文件,这样就可以看到 class 文件里面的内容。同时也可将其输出到一个 .txt 文件,使用的命令是:javap -v -p xxx > xxx.txt 。

E:\JavaSpace\Java-Prepare-Lesson\Java-High\JVM-Frame\JVM-Chapter01-Demo\src\main\java\com\itbbfx>javap -v -p SumDemo
警告: 二进制文件SumDemo包含com.itbbfx.SumDemo
#描述信息
Classfile /E:/JavaSpace/Java-Prepare-Lesson/Java-High/JVM-Frame/JVM-Chapter01-Demo/src/main/java/com/itbbfx/SumDemo.class
  Last modified 2021-5-16; size 409 bytes
  MD5 checksum b9b13ea5dba3f2b62f4764d30eafc7fc
  Compiled from "SumDemo.java"
#描述信息
public class com.itbbfx.SumDemo
  minor version: 0
  major version: 52
  flags: ACC_PUBLIC, ACC_SUPER
#常量池
Constant pool:
   #1 = Methodref          #5.#14         // java/lang/Object."<init>":()V
   #2 = Fieldref           #15.#16        // java/lang/System.out:Ljava/io/PrintStream;
   #3 = Methodref          #17.#18        // java/io/PrintStream.println:(I)V
   #4 = Class              #19            // com/itbbfx/SumDemo
   #5 = Class              #20            // java/lang/Object
   #6 = Utf8               <init>
   #7 = Utf8               ()V
   #8 = Utf8               C
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值