JVM-JDK9 之后的类加载器
JVM-JDK9 之后的类加载器
程序员朱永胜有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步, 认准
https://blog.zysicyj.top
| 特性 | JDK 9+ 类加载器 | JDK 8 及以前的类加载器 |
|
|
—|
—–|
| 模块系统 | 引入了模块系统(Java Platform Module System)| 没有模块系统 |
| 命名空间隔离 | 使用模块系统实现了命名空间隔离,不同模块的类无法直接互相访问 |
没有明确的命名空间隔离,所有类都在同一个全局命名空间中 |
| 直接字节码处理 | 引入了 JEP 238 (Multi-Release JAR Files) 以及 JEP 261 (Module System) | 不支持直接字节码处理 |
| 默认类加载器变更 | 采用了平台类加载器进行默认加载,将 Bootstrap 类加载器委派给平台类加载器 |
使用扩展类加载器和应用程序类加载器作为默认加载器 |
| 全量类加载器执行顺序变更 | 利用模块系统与类加载器实现了双亲委派的全量类加载器执行顺序变更 |
按照双亲委派模型执行全量类加载器 |
| 拓展类加载器与系统类加载器分离 | 拓展类加载器与系统类加载器分离,拓展类加载器只加载 JDK 本身的扩展模块 |
拓展类加载器与系统类加载器混合在一起 |
| 热替换(HotSwap)| 引入了更先进的 HotSwap 实现,支持在运行时替换代码和重新定义类 |
HotSwap 功能有限,只能替换某些特定方法的实现 |
| 新的类加载器 | 引入了 jimage
类加载器和 AppCDS
类加载器 | 没有这些新的类加载器 |