JAVA类加载器

2021-06-09  本文已影响0人  KenChen_939

记录JVM里类加载的过程,我们写了那么多类,却不知道类的加载过程,岂不尴尬。😶🌫️

类的生命周期
类的生命周期包括加载、链接、初始化、使用和卸载。前三个属于类加载的过程,卸载指该对象被垃圾回收了。

类加载过程

1.验证(Verify)
确保class文件中的字节流符合房钱虚拟机的要求,确保class的正确性,不会危害到虚拟机的安全。
2.准备(Prepare)
给类中的静态字段分配内存,并设置默认初始值。
注:被final修饰的静态变量不会设置,因为final在编译阶段就设置好了。
3.解析(Resolve)
解析阶段的目的是将常量池内的符号引用解析成为实际引用。如果符号引用指向一个未被加载的类,那么将触发这个类的加载。

类加载器分类

获取ClassLoader

ClassLoader loader = Son.class.getClassLoader();
System.out.println(loader);
//sun.misc.Launcher$AppClassLoader@18b4aac2      此处根据JDK版本不同包路径也不同

ClassLoader loader = Son.class.getClassLoader().getParent();
System.out.println(loader);
//sun.misc.Launcher$ExtClassLoader@29453f44

ClassLoader loader = Son.class.getClassLoader().getParent().getParent();
System.out.println(loader);
//此处返回为null,因为出于安全考虑不允许见到bootstrapClassloader

//获取当前类的ClassLoader
System.out.println(Son.class.getClassLoader());

//获取当前线程上下文的ClassLoader
ClassLoader loader =  Thread.currentThread().getContextClassLoader();

//获取系统的ClassLoader
ClassLoader loader1 = ClassLoader.getSystemClassLoader();
        System.out.println(loader1);

加载机制-双亲委派机制

jvm对class文件采用的是按需加载的方式,当需要使用该类的时,jvm才会将它的class文件加载到内存中产生class对象。
双亲委派机制即是把请求交给父类处理的一种任务委派模式。

上一篇 下一篇

猜你喜欢

热点阅读