博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类加载器
阅读量:5337 次
发布时间:2019-06-15

本文共 1184 字,大约阅读时间需要 3 分钟。

1.  概述

  虚拟机把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,这个动作的代码模块称为类加载器。

2.  类与类加载器

  对于任意一个类,都需要加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性。

  比较两个是否相等只有在同一个类加载器的前提下才有意义,

  对于同一个class文件,如果他们的类加载器不同,那这两个类就必定不相等。

3.  类加载器

3.1 启动类加载器(Bootstrap ClassLoder)

  这个类负责将存放在<JAVA_HOME>\lib目录下,并且是虚拟机识别(仅按照文件名识别,如rt.jar,名字不符合的类库不会被加载)的类库加载到虚拟机内存中,启动类加载器无方法被Java程序直接引用。

3.2 扩展类加载器(Extension ClassLoder)

  该类加载器由 sun.misc.Launcher$ExtClassLoder 实现,负责加载<JAVA_HOME>\lib\ext目录下的,或者被 java.ext.dirs 系统变量所指定的所有类库,开发者可直接使用扩展类加载器。

3.3 应用程序类加载器(Application ClassLoder)

  该类加载器由 sun.misc.Launcher$AppClassLoder 实现,该类加载器是ClassLoder中getSystemClassLoder()的返回值,负责加载用户路径(ClassPath)下指定的类库一般情况下这个就是默认的类加载器。

3.4 自定义类加载器

  通过继承 ClassLoader ,然后重写findClass()方法自定义类加载器

4. 双亲委派模型

  

  如果有一个类加载器收到以一个类加载的请求,它先把这个请求委派给父类去完成,当父类无法完成这个加载请求时,子类才会尝试自己去加载这个类。

  Java 类随着它的类加载器一起具备了一种带有优先级的层次关系,保证Java体系中最基础的行为。

5. 破坏双亲委派模型

  1. JDK在1.2之后引入双亲委派模型,为了向前兼容,java.lang;ClassLoder添加了一个protected 的 findClass(), 用于实现自定义的类加载

  2. Java提供的一些服务需要调用第三方的代码,引入线程上下文类加载器(Thread Context ClassLoder)。该类加载器通过 java.lang.Thread 类的 setContextClassLoader() 进行设置。默认为应用程序类加载器。

  该过程中父类加载器请求子类加载器完成类加载请求。

 

转载于:https://www.cnblogs.com/virgosnail/p/9610047.html

你可能感兴趣的文章
div 绝对布局居中
查看>>
css overflow:hidden无效解决办法
查看>>
Java设计模式(21)——行为模式之备忘录模式(Memento)
查看>>
数据挖掘领域的十大经典算法
查看>>
Python 基础语法
查看>>
序列化与反序列化二叉树
查看>>
创建型模式-单例模式
查看>>
maven名词解释
查看>>
hibernate框架学习之二级缓存
查看>>
浅析MySQL之JOIN
查看>>
Hadoop 1.0无法通过ip访问
查看>>
C#调用wcf提示" 已超过传入消息(65536)的最大消息大小配额。"
查看>>
KMP模板
查看>>
继续,没有计划
查看>>
MySQL、Oracle、DB2等数据库常规排序、自定义排序和按中文拼音字母排序
查看>>
Layui_Tree模块遍历HDFS
查看>>
url 特殊字符
查看>>
django实现分页显示
查看>>
[No00002E]关于大数据,你不知道的6个迷思
查看>>
JAVA入门--目录
查看>>