原始博客的地址:

https://lyldalek.notion.site/JVM-0x5-196d56b78fb7402798fa8b33e6d30214

该项目的地址:

https://github.com/aprz512/write-your-own-jvm

这一篇,我们主要是实现方法区(现在叫元数据区)里面的东西。方法区主要存放从class文件获取的类信息。此外,类变量也存放在方法区中。当Java虚拟机第一次使用某个类时,它会搜索类路径,找到相应的class文件,然后读取并解析class文件,把相关信息放进方法区。

放进方法区的东西有:

其实这些信息在之前我们解析 class 文件的时候都遇到过。现在只不过我们换一种形式来表示这些信息。

类信息建立

之前我们已经可以找到 class 文件,并把其内容加载到内存中,对其解析成一个 ClassFile 的结构,但是 ClassFile 中的内容仍然无法直接在方法区使用,还需要进一步的转换。

MyClass

我们先实现自己的 Class,为了与Java本身的类区分开,就加一个My前缀。

public class MyClass {
}

MyMethod

类的方法与字段结构比较像,我们写一个父类:

public class ClassMember {
    protected int accessFlag;
    protected String name;
    protected String descriptor;
    protected MyClass myClass;
}