day3: JVM
Day3 学习计划详解:类加载机制与自定义类加载器实战
以下是 Day3 的详细学习步骤、核心知识点和实操指南,结合书籍与工具,确保你高效完成目标。
上午(3小时):类加载机制与双亲委派模型
核心目标:掌握类加载流程、双亲委派机制、自定义类加载器的实现原理。
1. 学习内容与步骤
精读《深入理解Java虚拟机》第7章(重点:7.2-7.4节)
核心知识点:
类加载流程:加载(Loading)→ 链接(Linking)→ 初始化(Initialization);
双亲委派模型:
类加载器层级:Bootstrap → Extension → Application → Custom;
委派逻辑:子加载器先委托父加载器加载类,避免重复加载。
破坏双亲委派的场景:
Tomcat为每个Web应用独立加载类(隔离性需求);
SPI机制(如JDBC驱动加载,使用线程上下文类加载器)。
学习建议:
绘制类加载流程图(标注各阶段任务,如
ClassLoader.loadClass()
调用链)。
结合OpenJDK源码验证类加载逻辑
源码定位:
ClassLoader
类源码路径:src/java.base/share/classes/java/lang/ClassLoader.java
关键方法:
loadClass()
(双亲委派入口)、findClass()
(自定义类加载逻辑)。
实践建议:
使用IDE(如IntelliJ)跟踪
loadClass()
方法,观察委派流程。
Arthas工具分析类加载
常用命令:
实践建议:
运行一个简单Java程序,用Arthas追踪
String
类的加载过程。
2. 学习产出
知识笔记:整理类加载流程、双亲委派模型的核心逻辑及破坏场景。
疑问记录:如“如何实现热部署?”、“如何隔离不同模块的类加载”。
下午(3小时):自定义类加载器实现加密Class加载
核心目标:手写自定义类加载器,加载加密的Class文件,理解类加载的灵活性。
1. 实战步骤与代码示例
设计加密Class文件
加密方法:使用简单的XOR加密(示例):
生成加密Class文件:
编译一个测试类(如
HelloWorld.java
),生成HelloWorld.class
;调用
ClassEncryptor.encrypt()
加密HelloWorld.class
,保存为HelloWorld_encrypted.class
。
实现自定义类加载器
代码示例:
测试与验证
测试用例:
预期输出:
2. 交付物要求
GitHub代码:
创建仓库(如
custom-classloader
),提交以下内容:ClassEncryptor.java
(加密工具类);CustomClassLoader.java
(自定义加载器);HelloWorld.java
(测试类)及加密后的Class文件;TestCustomLoader.java
(测试用例)。
README.md:说明编译、加密、运行步骤。
类加载时序图:
工具推荐:PlantUML、Draw.io;
内容要求:标注双亲委派流程、自定义加载器的
findClass()
调用链。示例图核心节点:
晚上(2小时):总结与输出
技术博客:
标题:《Day3:突破双亲委派——自定义类加载器与加密Class加载实战》
内容框架:
类加载机制与双亲委派模型总结;
自定义类加载器实现步骤与加密逻辑;
应用场景(如热部署、模块隔离)。
提交GitHub与文档:
推送代码至仓库,附时序图和博客链接;
在本地或云笔记中归档Day3学习记录。
资源使用建议
书籍重点章节:
《深入理解Java虚拟机》第7章(精读7.2-7.4节);
《Java核心技术卷I》第9章(类加载器与反射机制)。
开源代码参考:
Tomcat类加载器(源码链接):学习
WebappClassLoader
的实现;Java Agent热部署(如JRebel):研究其如何利用自定义类加载器实现热更新。
明日预习(Day4)
核心内容:Arthas工具链(监控、诊断、热更新);
工具准备:安装Arthas,准备一个模拟OOM的Java程序(如循环创建大对象)。
Day3完成标志:加密Class加载成功、时序图清晰、博客发布。 若遇到问题:优先查阅《深入理解Java虚拟机》第7章,或在Stack Overflow搜索“custom classloader example”。
Last updated