Java中的类加载器主要分为以下四类:
(1)根类加载器(BootStrapClassLoader), 主要负责加载jre/lib/rt.jar相关的字节码文件的。
(2)扩展类加载器(ExtensionClassLoader), 主要负载加载 jre/lib/ext/*.jar 这些jar包的。 该类加载器在JDK1。9的时候更名为: Platform Class Loader, 其父类加载器为: null。
(3)应用程序类加载器(ApplicationClassLoader), 主要负责加载用户自定义的类以及classpath环境变量所配置的jar包的。 该类加载器在JDK1.9的时候更名为: System ClassLoader, 其父类加载器为: ExtensionClassLoader。
(4)自定义类加载器(UserClassLoader), 负责加载程序员指定的特殊目录下的字节码文件的。大多数情况下,自定义类加载器只需要继承ClassLoader这个抽象类,重写findClass()和loadClass()两个方法即可。
2、java类加载器的类加载机制
,我们再来聊一聊”类加载机制”,在JVM中类加载机制主要有3种:
(1)全盘加载。顾名思义,就是当某一个类加载器加载某个.class文件时, 默认也会连同该文件所依赖的.class一起加载(除非显示声明通过某个指定的类加载器加载)。
(2) 缓存机制。即所有类加载器已经加载过的.class文件都会被保存到缓存中,下次使用该.class文件时,JVM会优先从缓存中查找,如果没有,才会去加载指定的字节码文件,这也是为什么当字节码文件变化后, 需要重启JVM后才能看到修改效果的原因。
(3)双亲委派。大白话解释,儿子(App)要星星,他自己实现不了,就找他老爹(Ext)要,他老爹能实现的话就给他了,实现不了,就找他爷爷(BootStrap)要,说: 你孙子要天上的星星。他爷爷如果能实现就给了,如果也实现不了,就会告诉他爹(Ext),让你儿子(App)自己实现吧。这种情况有点极端,属于谁都没有加载,则程序报错,会抛出异常。
(4)总结: 类加载器自上而下检查(App --> Ext --> BootStrap),自下而上加载(BootStrap --> Ext --> App)。
类加载器(ClassLoader)是负责加载类的对象的,也就是将.class字节码文件加载到JVM内存中的。那它什么时候才会去加载.class字节码文件呢? 答案是: 当Java程序次使用某个类中的内容,而该类的字节码文件在内存中不存在时,类加载器就会去加载该类的字节码文件。
俗话说”渡人先渡己”,要想成为别人的榜样,帮助别人。首先要做好自己。生活中如此, 类加载器也一样。要想加载我们自定义的类,类加载器必须先完成”自加载”的过程。聊到这,不得不提的就是”类加载器的分类”了。
以上就是粤嵌科技的小编给大家整理的关于java语言的工作原理的内容,希望大家在开始学习java技术的时候可以有用。如果说你想要学习java技术的话,那么粤嵌科技欢迎大家来我们公司进行实地考察,也可以点击我们文章下面的获取试听资格按钮来获取我们的java培训免费试听资格,来体验我们的java课程并和我们的java讲师进行面对面的交流和沟通,粤嵌科技的java培训班欢迎每位想要学习java技术的学员来我们的班级进行免费体验学习。