JVM | 第2部分:虚拟机执行子系统《深入理解 Java 虚拟

2022-03-24  本文已影响0人  多氯环己烷

前言

参考资料
《深入理解 Java 虚拟机 - JVM 高级特性与最佳实践》

第1部分主题为自动内存管理,以此延伸出 Java 内存区域与内存溢出、垃圾收集器与内存分配策略、参数配置与性能调优等相关内容;

第2部分主题为虚拟机执行子系统,以此延伸出 class 类文件结构、虚拟机类加载机制、虚拟机字节码执行引擎等相关内容;

第3部分主题为程序编译与代码优化,以此延伸出程序前后端编译优化、前端易用性优化、后端性能优化等相关内容;

第4部分主题为高效并发,以此延伸出 Java 内存模型、线程与协程、线程安全与锁优化等相关内容;

本系列学习笔记可看做《深入理解 Java 虚拟机 - JVM 高级特性与最佳实践》书籍的缩减版与总结版,想要了解细节请见纸质版书籍;


5. 类文件结构

5.1 无关性概述

5.2 Class 类文件结构

5.3 class 文件的数据项

5.4 字节码指令

5.5 字节码用途分类

6. 类加载机制

6.1 必须要对类进行初始化的五种时机(对类的主动引用)

6.2 类加载过程(生命周期)

6.3 类加载器

类加载器工作流程.png

6.3 双亲委派模式

6.4 破坏双亲委派模式

7. 虚拟机字节码执行引擎

“栈帧”的概念在《JVM | 第1部分:自动内存管理与性能调优》提到,这里不再赘述;

7.1 确定被调用的方法

public class Main {
    static class A {
    }
    static class B extends A {
    }
    static class C extends B {
    }
    public void say(A a) {
        System.out.println("A");
    }
    public void say(B b) {
        System.out.println("B");
    }
    public void say(C c) {
        System.out.println("C");
    }
    public static void main(String[] args) throws Exception {
        Main main = new Main();
        Main superMain = new Super();
        B os = new C();
        main.say(os);
        superMain.say((A) os);
        //输出 B S-A
    }
}
 
class Super extends Main {
    public void say(A a) {
        System.out.println("S-A");
    }
    public void say(B b) {
        System.out.println("S-B");
    }
    public void say(C c) {
        System.out.println("S-C");
    }
}

最后

\color{blue}{\rm\small{新人制作,如有错误,欢迎指出,感激不尽!}}

\color{blue}{\rm\small{欢迎关注我,并与我交流!}}

\color{blue}{\rm\small{如需转载,请标注出处!}}

上一篇 下一篇

猜你喜欢

热点阅读