Java ClassLoader 基础

简介:

基本概念:

Java Classloader(类装载器):JRE的一个模块,用于装载Java类到JVM。


JRE加载一个类到JVM需要以下基本步骤:

  1. 装载:查找并导入class文件,如String.class; 

  2. 链接:校验、准备、解析,其中解析步骤是可以选择的,由使用目的决定; 

  3. 校验:检查载入class文件数据的正确性,因为某些class文件可能是利用工具生成,而非使用Java编译器编译生成; 

  4. 准备:给类的静态成员分配存储空间; 

  5. 解析:将符号引用转成直接引用; 

  6. 初始化:对类的静态成员、静态代码块执行初始化工作。


JRE自带的的三个ClassLoader:

  1. Bootstrap class loader:用于装载<JAVA_HOME>/jre/lib目录下的Java核心类库,该装载器使用本地代码实现,本身不是Java类。

  2. Extensions class loader:用于装载<JAVA_HOME>/jre/lib/ext目录下的类库,或者java.ext.dirs系统属性指定的目录,具体实现类是sun.misc.Launcher$ExtClassLoader。

  3. System class loader:用于装载应用CLASSPATH路径指定的类与资源(如配置文件等),具体实现类是sun.misc.Launcher$AppClassLoader,所以也常称为App class loader。


为什么需要三个class loader?这三个class loader又是如何分工了?这年代靠拼爹,需要任何东西尽管先向爹要,爹没有再自己拼,下图中100万比喻为请求的类,天一为System class loader,天一爸爸为Extensions class loader,天一爷爷为BootStrap class loader,查看保险箱相当于load class,通过这个形象的比喻可以简单的理解class loader代理关系,以及单一职责链模式。JRE提供三个class loader主要是为了分工以及JVM实现的需要。

wKioL1RrNofQy5W8AALl3ik0_QY582.jpg


     本文转自sarchitect 51CTO博客,原文链接:http://blog.51cto.com/stevex/1579273,如需转载请自行联系原作者




相关文章
|
19天前
|
存储 Java
最新Java基础系列课程--Day10-IO流文件处理(一)
最新Java基础系列课程--Day10-IO流文件处理
|
19天前
|
Java 关系型数据库 MySQL
在Java的反射中,Class.forName和ClassLoader的区别
在Java的反射中,Class.forName和ClassLoader的区别
78 3
|
19天前
|
存储 缓存 Java
最新Java基础系列课程--Day10-IO流文件处理
最新Java基础系列课程--Day10-IO流文件处理
|
19天前
|
搜索推荐 Java
Java基础(快速排序算法)
Java基础(快速排序算法)
26 4
|
19天前
|
缓存 分布式计算 Java
Java基础深化和提高-------IO流
Java基础深化和提高-------IO流
111 0
|
19天前
|
缓存 Java Apache
最新Java基础系列课程--Day10-IO流文件处理(三)
最新Java基础系列课程--Day10-IO流文件处理
|
19天前
|
Java
最新Java基础系列课程--Day10-IO流文件处理(二)
最新Java基础系列课程--Day10-IO流文件处理
|
10月前
|
设计模式 缓存 分布式计算
|
11月前
|
Java 数据库连接
【Java面试】反射中,Class.forName和classloader的区别是什么?
【Java面试】反射中,Class.forName和classloader的区别是什么?
57 0
|
8月前
|
存储 缓存 Java
Java基础知识第二讲:Java开发手册/JVM/集合框架/异常体系/Java反射/语法知识/Java IO
Java基础知识第二讲:Java开发手册/JVM/集合框架/异常体系/Java反射/语法知识/Java IO
176 0
Java基础知识第二讲:Java开发手册/JVM/集合框架/异常体系/Java反射/语法知识/Java IO