类加载:加载、验证、准备、解析、初始化、使用、卸载

我是研究僧i 提交于 2020-03-23 22:17:47

3 月,跳不动了?>>>

加载:1. 通过完全限定名加载.class字节码文件,获取字节流。2. 实例化对应的Class实例

验证:验证字节流是否符合虚拟机规范,文件格式等

准备:为类变量分配内存并设置初始值。存储在方法区中

解析:将符号引用转为直接引用

初始化:执行JAVA代码进行初始化。执行先初始化父类,再初始化子类。先初始化静态,再初始化非静态的。先执行初始化块,再执行构造方法。

  1. 类加载需要锁。是因为避免多个线程同时访问资源,导致结果不正确
  2. JAVA如何判断一个类相等?完全限定名相同且都是同一个类加载器加载得到的Class实例。
  • 因此,类加载需要双亲委派模型。子加载器需要先让父加载器加载,如果没有再执行自身的加载。这样能保证一个类产生一个Class对象,避免混乱

从JDK1.8之后的版本PlatformClassLoader取代了原来的ExtClassLoader。主要是因为之前直接在lib\ext目录添加jar包不够安全。

public class Main {
    public static void main(String[] args) throws Exception {
        ClassLoader loader = Main.class.getClassLoader();

        while (loader != null) {
            System.out.println(loader);
            loader = loader.getParent();
        }
    }
}

输出:

jdk.internal.loader.ClassLoaders$AppClassLoader@4459eb14
jdk.internal.loader.ClassLoaders$PlatformClassLoader@47d384ee

深入探讨 Java 类加载器

进阶Java编程(11)ClassLoader类加载器【待完成】

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!