【JVM知识总结-10】类加载器

产品倒闭
• 阅读 469

【JVM知识总结-1】JVM内存模型
【JVM知识总结-2】HotSpot虚拟机对象
【JVM知识总结-3】垃圾收集策略与算法
【JVM知识总结-4】HotSpot垃圾收集器
【JVM知识总结-5】内存分配与回收策略
【JVM知识总结-6】JVM性能调优
【JVM知识总结-7】类的文件结构
【JVM知识总结-8】类的加载时机
【JVM知识总结-9】类加载的过程
【JVM知识总结-10】类加载器

类与类加载器

判断类是否“相等”

任意一个类,都是加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性,每一个类加载器,都有一个独立的类名称空间。
因此,比较两个类是否“相等”,只有在这两个类是由同一个类加载器加载的前提下才有意义,否则,即使这两个类来源于同一个Class文件,被同一个虚拟机加载,只要加载它们的类加载器不同,那么这两个类就必定不相等。
这里的“相等”,包括代表类Class对象的equals()方法,isInstance()方法的返回结果,也包括使用instanceof关键字做对象所属关系判定等情况。

加载器种类

系统提供了3中类加载器:

  • 启动类加载器(Bootstrap ClassLoader):负责将存放在<JAVA_HOME>\lib目录中的,并且能被虚拟机识别的(仅按照文件名识别,如rt.jar,名字不符合的类库即使放在lib目录中也不会被加载)类库加载到虚拟机内存中。
  • 扩展类加载器(Extension ClassLoader):负责加载<JAVA_HOME>\lib\ext目录中的所有类库,开发者可以直接使用扩展类加载器。
  • 应用程序类加载器(Application ClassLoader):由于这个类加载器是ClassLoader中的getSystemClassLoader()方法的返回值,所以一般也称它为“系统类加载器”。它负责加载用户类路径(classpath)上所指定的类库,开发者可以直接使用这个类加载器,如果应用程序中没有自定义过自己的类加载器,一般情况下这个就是程序中默认的类加载器。

当然,如有必要,还是可以加入自己定义的类加载器。

双亲委派模型

什么是双亲委派模型

双亲委派模型是描述类加载器之间的层次关系。它要求除了顶层的启动类加载器外,其余的类加载器必须有自己的父类加载器。(父子关系一般以继承的方式实现,而是以组合关系来复用父加载器的代码)

工作过程

如果一个类加载器收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器去完成,每一个层次的类加载器都是如此,因此所有的加载请求都应该传送到顶层的启动类加载器中,只有当父类加载器反馈自己无法完成这个类加载请求(如:找不到需要的类)时,子加载器才会尝试自己去加载。
在java.lang.ClassLoader中的loadClass方法中实现该过程。

为什么使用双亲委派机制

像java.lang.Object这些存放在rt.jar中的类,无论使用哪个类加载器加载,最终都会委派给最顶端的启动类加载器加载,从而使得不同加载器加载的Object类都是同一个。
相反,如果没有使用双亲委派机制模型,由各个类加载器自行去加载的话,如果用户自己编写了一个称为java.lang.Object的类,并放在classpath下,那么系统就会出现多个不同的Object类,Java类型体系中最基础的行为也就无法保证。

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java基础知识随身记
2018年11月12日20:51:35一、基础知识:1、JVM、JRE和JDK的区别:JVM(JavaVirtualMachine):java虚拟机,用于保证java的跨平台的特性。  java语言是跨平台,jvm不是跨平台的。JRE(JavaRuntimeEnvironment):java的运行环境,包括jvmjava的核心类
Wesley13 Wesley13
3年前
java 虚拟机 收集器 总结
java虚拟机收集器总结|垃圾收集器|新生代|老年代|jvm参
Wesley13 Wesley13
3年前
Java 开发岗面试知识点解析
在不断的面试中,分类总结了Java开发岗位面试中的一些知识点。主要包括以下几个部分:1.Java基础知识点2.Java常见集合3.高并发编程(JUC包)4.JVM内存管理5.Java8知识点6.网络协议相关7.数据库相关8.MVC框架相关9.大数据相关10.Linux命令相
Stella981 Stella981
3年前
JVM参数说明介绍
1.JVM运行时数据区内存参数说明!(https://oscimg.oschina.net/oscnet/051d0ecafbef225b7b495ff43f6aec3173d.png)2.JVM垃圾收集器参数总结!(https://oscimg.oschina.net/oscnet/c2d0b716ad17c45ae776caa
Stella981 Stella981
3年前
JVM(二)Java虚拟机组成详解
导读:详细而深入的总结,是对知识“豁然开朗”之后的“刻骨铭心”,想忘记都难。Java虚拟机(JavaVirtualMachine)下文简称jvm,上一篇我们对jvm有了大体的认识,进入本文之后我们将具体而详细的介绍jvm的方方面面,而本文主要讲的是jvm的组成,了解了它,就揭开了jvm的神秘面纱。一、jvm的主要组成部分
Stella981 Stella981
3年前
JVM系列【6】GC与调优2
JVM系列笔记目录虚拟机的基础概念class文件结构class文件加载过程jvm内存模型JVM常用指令GC与调优了解HotSpot常用命令行参数JVM的命令行参数参考:https://docs.oracle.com/javase/8/docs/
Stella981 Stella981
3年前
JVM系列【6】GC与调优1
JVM系列笔记目录虚拟机的基础概念class文件结构class文件加载过程jvm内存模型JVM常用指令GC与调优GC基础知识什么是垃圾​没有任何引用指向的一个对象或多个对象(循环引用)!file(https:
Stella981 Stella981
3年前
JVM系列【6】GC与调优3
JVM系列笔记目录虚拟机的基础概念class文件结构class文件加载过程jvm内存模型JVM常用指令GC与调优调优前的基础概念1.吞吐量:用户代码时间/(用户代码执行时间垃圾回收时间)2.响应时间:STW越短,响应时间越好3.
Stella981 Stella981
3年前
JVM运行机制(非原创)
文章大纲1.JVM基本概念2.JVM的体系结构3.JVM启动流程一、JVM基本概念1.Java虚拟机(JVM)是可运行Java代码的假想计算机2.Java虚拟机包括类加载器、一组寄存器、方法区、一个垃圾回收堆、直接内存、一个栈、和一个存储方法域、PC寄存器等3.Java编译、运行流程如
Stella981 Stella981
3年前
JVM的艺术—JAVA内存模型
\喜欢文章,动动手指点个赞\引言亲爱读者你们好,关于jvm篇章的连载,前面三章讲了类加载器,本篇文章将进入jvm领域的另一个知识点,java内存模型。彻底的了解java内存模型,是有必要的。只要掌握了java的内存模型,内存空间分为哪些区域,才能更好地理解,java是如何创建对象以及如何分配对象的空间。对后续的jvm调优打下坚实