Java 程序员Java

还不懂「JVM-类加载」么?面试官又在问了!

2021-08-06  本文已影响0人  程序花生

类加载过程

类加载机制:

类的生命周期

public class SuperClass {
        static {
            System.out.println("SuperClass init!"); }
        public static int value = 123;
}

class SubClass extends SuperClass {
        static {
            System.out.println("SubClass init!"); }
    }
    class test {
        public static void main(String[] args) {
            System.out.println(SubClass.value);
        }
    }

加载

加载阶段需要做的三件事

  1. 通过一个类的全限定名来获取定义此类的二进制字节流。
  2. 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。
  3. 在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。

验证

目的

  1. 文件格式验证:验证魔数开头、主次版本号、常量池是否支持、Class文件中各部分是否有被删除或附加的信息
  2. 元数据验证:主要是语义分析、是否有父类、类中字段是否与父类产生矛盾(如覆盖了父类的final字段)
  3. 字节码验证:主要判断语义是否合法。符合逻辑、保证指令安全
  4. 符号引用验证:主要判断该类是否缺少或被禁止访问它依赖的某些外部类、方法、字段等资源

准备

目的

public static int value = 123;

解析

目的

  1. 类或接口的解析
  2. 字段解析
  3. 方法解析
  4. 接口方法解析

初始化

目的

双亲委派模型

双亲委派模型的工作过程是

这样组织类之间的关系的好处

错误: 在类 java.lang.String 中找不到 main 方法, 请将 main 方法定义为:
   public static void main(String[] args)
否则 JavaFX 应用程序类必须扩展javafx.application.Application

==如何破坏双亲委派模型==

Tomcat的类加载器架构

==基本需求==

作者:xiaoff
链接:https://juejin.cn/post/6993118227521880094
来源:掘金

上一篇 下一篇

猜你喜欢

热点阅读