您的位置:首页 > 编程语言 > Java开发

java 类加载机制

2019-01-10 10:50 465 查看

类加载器

1 类与类加载器

类加载器定义
什么是类加载器?通过一个类的全限定名来获取描述此类的二进制字节流这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”
双亲委派模型
作为开发者角度 以下三类 类加载器大部分java系统都会用

  • 启动类加载器 BootStrap ClassLoader 加载<JAVA_HOME>\lib 目录中 或者被-Xbootclasspath参数指定路径中,被虚拟机识别的类库加载到虚拟机内存中 无法被java程序直接饮用
  • 扩展类加载器 Extension ClassLoader 由sun.misc.Launcher$ExtClassLoader 实现,负责加载<JAVA_HOME>\lib\ext目录 或者被java.ext.dirs系统变量指定路径所有类库 开发者可以直接使用扩展类加载器
  • 应用程序类加载器 Application ClassLoader 有sun.misc.Launcher$App-ClasserLoader实现 由ClassLoader中的getSystemClassLoader()方法返回值, 负责加载用户路径ClassPath上所指定的类库,开发者可以直接使用这个类加载器;

2、双亲委派机制

类加载器之间这种层次关系(如上图),称为类加载器的双亲委派模型(Parents Delegation Model)
双亲委派模型要求除了顶层的启动类加载器外,其余类加载器都要有自己的父类加载器。
双亲委派模型工作过程:
如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一层次类加载器都是如此,因此所有的类加载请求最终都应该传送到顶层的启动类加载器中,只有当负加载器反馈自己无法完成这个加载请求(它的搜索范围没有找到所需的类)时,子加载器才会尝试自己去加载

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: