JVM基础——类加载器与双亲委派模型
一、前言 这是 JVM 系列博客的第五篇,也是最后一篇,写完这篇博客,我就要暂时停止对 JVM 的学习,开始学习其他方面的内容了。这篇博客就来说一说 JVM 中的类加载器,以及类加载的双亲委派模型。 二、正文 2.1 什么是类加载器 首先我们要知道一件事,那就是什么是类加载器?大家都知道,我们编写的代码需要先被编译为 class 字节码才能被执行, JVM 解释器只能识别字节码,而不能执行 Java 源代码。而程序都是在内存中执行的,所以,为了能够执行字节码,就需要将它读取到内存中。将字节码读取到内存中这个工作,就是由类加载器来完成的。类加载器根据提供的全限定类名(包名+类名),找到对应路径下的类的 class 文件,将其读取到 JVM 管理的方法区中,这样才能执行其中的代码指令,访问类中的数据。关于类加载机制,可以参考这篇博客: JVM基础——分析类的加载过程 。 对于类加载器,需要注意一个问题。每一个类都是由它本身和类加载器一同来确定唯一性。这是什么意思?这就是说, 如果一个类的字节码,分别使用两个不同的类加载器进行加载,则对于JVM来说,会将这两次加载识别为不同的两个类 。举个例子,我们有一个类 Test ,创建了一个自定义的类加载器去加载它,并通过自定义的类加载器得到的 Class 对象创建 Test 对象 t (反射),此时运行 t instanceof