类加载器简述
来源:互联网 发布:mac ppt左边不见了 编辑:程序博客网 时间:2024/05/21 22:25
前言:本博客内容由张孝祥Java高新技术整理而来
java虚拟机中可以安装多个类加载器,系统默认三个主要的类加载器,每个类负责加载特定位置的类:BootStrap,ExtClassLoader,AppClassLoader。
类加载器也是java类,因为其他事java类加载器本身也要被类加载器加载,显然必须有第一个类加载器不是java类,这正是BootStrap。
java虚拟机中的所有雷庄在其采用具有父子关系的树形结构进行组织,在实例化每个类装载器对象时,需要为其制定一个父级类装载器或者默认采用系统类装载器为其父级类加载。
首先是一个实例,这个例子将本身这个类的加载器名称和其父类加载器名称打印了出来
package com.dao.chu.movie;public class ClassLoaderTest {public static void main(String[] args) {ClassLoader classLoader = ClassLoaderTest.class.getClassLoader();while (null != classLoader) {System.out.println(classLoader.getClass().getName());classLoader = classLoader.getParent();}}}
输出结果:
sun.misc.Launcher$AppClassLoader
sun.misc.Launcher$ExtClassLoader
其中根加载器为null也就是BootStrap
下面是类加载器之间的父子关系和管辖范围图:
下面我们将ClassLoaderTest这个类导出一个jar包到jre的ext目录下
注意:如果直接导出有权限错误问题,可先导出到其他目录,在拷贝到jre下
我们再次运行刚才的代码
运行结果:
sun.misc.Launcher$ExtClassLoader
只有ExtClassLoader加载了,证明了ExtClassLoader的管辖范围,并且类加载是先从父加载器加载,加载不到才会到子加载器加载。
类加载器的委托机制
首先当前线程的类加载器去加载线程中的第一个类。
如果类A中引用了类B,java虚拟机将使用加载类A的类加载器加载类B。还可以直接调用ClassLoader.loadClass()方法来指定某个类加载器去加载某个类。
每个类加载器加载类时,又先委托给其上级类加载器。
当所有祖宗类加载器没有加载到泪,回到发起者加载器,还加载不到则抛出ClassNotFoundException,而不是再去找发起者的儿子类。
- 类加载器简述
- Java的类加载器简述
- 动态代理、类加载器简述
- java类加载机制简述
- Hibernate懒加载简述
- 简述图片加载框架
- 关于JVM加载类和初始化类简述
- 简述JVM基础(五):虚拟机类加载机制
- jquery加载页面简述区别
- 浏览器加载html过程简述
- 类简述
- 【JAVA基础简述】java从启动到类加载完成的内部动作
- Linux共享库两种加载方式简述
- Windows DLL文件的加载过程[简述]
- 简述Android的四种加载模式
- 简述Hibernate的缓存和懒加载
- 简述spring加载注解的过程
- 加载、类加载、类加载器
- 《纯干货16》调整学习速率以优化神经网络训练
- c语言中的fopen()函数
- Kaggle初学者五步入门指南,七大诀窍助你享受竞赛
- Spark源码系列(二)RDD详解
- (转)投资AI的核心标准是场景和数据
- 类加载器简述
- case的详细用法
- 项目开发周期把控,一个项目包括哪些流程?又怎样提高一个开发项目效率?
- 优化了一次sql
- volatile的原理及其使用
- 利用内存理解指针
- BootStrap设置footer元素在底部
- IDTCPSERVEr
- Flume使用Hive作为Sink总结