问题 16
想要成为一名高级 Java 开发人员,光会写业务代码可不行。我们都知道 Java 源文件会被编译为 class 文件,然后在 Java 运行时类加载器负责加载 class 文件。那么你有没有想过,JVM 中有几种类加载器,它们是如何分工的,以及加载过程中经历了什么?
答案
说起类加载过程,我们首先得了解 ClassLoader 类加载器。类加载器负责将 class 数据加载到 Java 运行时环境中,它控制 着JVM 去何处(本地文件系统、远程网络或者其他环境)加载 class 信息,以及 class 数据格式的规范性。
类加载器历史
在 Java 1.1 及之前的版本中,各个类加载之间不存在联系。例如系统类加载器负责加载应用,以及 classpath 目录下的 class 文件和资源;而 applet 的类加载器负责和服务器端交互以加载 applets 应用和它相关的 class 文件和资源。
在 J2SE 1.2 版本(如果你知道 J2SE 这个称呼,证明你是一名老程序员了,哈哈),类加载器之间产生了一种关系,这种关系也就是我们熟知的 parent delegation(中文译作双亲委派) 机制。
双亲委派是什么
简单来说双亲外派机制就是当前的类加载器去加载一个 class 数据之时,它会先委托它的父加载器去做这件事,父加载器它会递归去委托自己的父加载器去加载,