原始博客的地址:

https://lyldalek.notion.site/JVM-0x3-f89913f3ef0d453a820a330e8511455a

该项目的地址:

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

有了前面2篇的基础,现在我们终于有能力进入正题了。

我们先来看一张图:

Untitled

相信大家对这张图还是比较熟悉的,今天我们主要的目的就是搭建一个运行数据区的框架出来。

虚拟机栈

分析完成后,我们的目标就简单多了,先来了解一下栈区的构成。

Untitled

虚拟机栈里面有多个栈帧,每个栈帧对应着一个方法。我们在程序中打一个断点,方法的调用层次就对应着虚拟机栈里面的层次,举个例子:

public class Test01 {
    public static void main(String[] args) {
        test(args);
    }

    public static void test(String[] args) {
        test2(args);
    }

    public static void test2(String[] args) {
        System.out.println(args.length);
    }

}

我们给 test2 方法打上断点:

Untitled