对类加载器(ClassLoader)的理解

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对类加载器(ClassLoader)的理解相关的知识,希望对你有一定的参考价值。

类加载器(ClassLoader)

  当编辑器编译java源文件后,会产生以个相对一的字节码文件(.class) 

  当程序执行开始之前,必须将这个文件载入内存中,生成一个与之匹配的Class对象,

  任何以个类加载之后jvm都会为其创建以个唯一的class对象(元对象),再后续都是通过这个Class对象来创建实例,后话(Class对象就是放射的基石。)

  这个过程我们称之为类加载  

 

  要弄清楚类加载的机制,授信我们必须要清楚了解类加载的相关知识,它是完成整个类加载的重要工具。

  简单的说,当有个Class文件载入内存之后,并构建成一个Class对象的过程,就称之为类加载

类加载器(三类)

1,启动类加载器(BootStrap ClassLoader)

  启动类加载器是负责加载jdk核心包下的类文件,对应的目录就是“JDK安装目录/jre/lib”。其中最重要的以个jar文件就是rt.jar

  注意:这个类加载器我们是没有办法区操作的,因为它本身是用c++语言实现的

2,扩展类加载器(Extension ClassLoader)

  这个类加载器,是由启动类加载器来加载的,扩展类加载器是用java语言实现,它主要负责加

  载jdk里面的扩展jar文件,对应 目录是"/JDK安装目录/jre/lib/ext"

3,应用程序类加载器(Application ClassLoader)

  这个类加载器也是使用java语言实现,它同样由引导类加载器加载。它主要负责加载我们开发人员说明编写的java类,通常对应的目录就是环境变量下的ClassPath路径

 

双亲委托模型

  jvm的类加载时基于双亲委托模型,也就是当我们编写一个任意类的时候,本身不是由应用程序加载器立即加载,而是先委托给夫加载器,当夫加载器再自己说明加载的范围内找不到相对应的class文件时,最后才会将加载权交回给子加载器区加载,这样做的目的是为了保证jvm的安全机制

技术分享图片

双亲委托模型的工作流程:

  如果以个类加载器收到类加载的请求,它首先不会自己先尝试加载这个类,而是把请求委托给父类加载器去完成,依次向上,因此,所有的类加载器请求最终都应该被传递到顶层的启动类的加载器中,只有当父加载器在它的搜索范围中没有找到所需要的类时,即无法完成该加载,子加载器才会尝试自己去加载类

 

 


以上是关于对类加载器(ClassLoader)的理解的主要内容,如果未能解决你的问题,请参考以下文章

深入理解类加载器和双亲委派模型

类加载器深入理解和双亲委托模型的案例分析

深入理解JVM中的ClassLoader类加载器

类加载器盲区整理

Class.forName 和 ClassLoader 的区别

java反射中,Class.forName 和 ClassLoader 加载类的区别