JDK源码阅读笔记
Read The Fucking Source Code ---- RTFM
源码面前,了无秘密 ---- 侯捷
项目介绍
本项目主要整理/记录阅读JDK
源码时的理解与体会,仅供参考。
项目中包含多个分支,主分支命名为master
,测试分支命名为test
,源码/笔记分支以JDK-X
(X是JDK版本)命名。
-
master
分支不定期汇总源码笔记与测试代码的快照。 -
JDK-X
分支存放JDK
的源码与笔记。阅读过程中产生的笔记以注释的形式直接写在源码文件中。 -
test
分支存放辅助理解的测试代码,可直接运行。- 注1:建议在
OracleJDK
/OpenJDK
11的环境下运行测试文件 - 注2:不会为所有类/接口都写测试文件,有的是因为太简单,有的是因为已写过大量类似的,还有的是因为理解不到位
- 注1:建议在
使用说明
-
开箱即用。将项目克隆/下载到本地,然后使用
IntelliJ IDEA
打开即可。 -
阅读源码时请切换到
JDK-X
分支,且不需要关联JDK
。测试源码时请切换到
test
分支,此时需要关联OracleJDK
/OpenJDK
。 -
该源码不支持直接编译。如想完整编译整个
JDK
项目,请参考官方教程Building the JDK。 -
如果源码因缺失个别依赖文件而报错,请到谷歌搜索相关的jar包导入即可。或者可在Github Issues提出反馈。
-
欢迎在Github Issues交流好的想法、建议、意见。
Commit图例
序号 | emoji | 在本项目中的含义 | 简写标记 |
---|---|---|---|
(0) | 🎉 | 初始化项目 | :tada: |
(1) | 📝 | 更新文档,包括但不限于README | :memo: |
(2) | 💡 | 发布新的阅读笔记 (注1) | :bulb: |
(3) | ✨ | 增量更新阅读笔记 | :sparkles: |
(4) | ♻️ | 重构,主要指修改已有的阅读笔记,极少情形下会修改源码 (注2) | :recycle: |
(5) | ✏️ | 校对,主要指更正错别字、调整源码分组、修改源码排版等 | :pencil2: |
(6) | ✅ | 发布测试文件 | :white_check_mark: |
注1:
关于某个源码当前的阅读进度,请参考已阅代码清单_按功能排序。
注2:涉及到修改源码的场景,包括但不限于:
修改无意义的变量名为更易懂的变量名;
补全控制语句作用域上的花括号;
重构控制语句结构(如if语句的拆分,for/while的互换);
for循环和foreach循环的转换;
拆分过长且难读的调用链,将中间过程单独摘出来;
提取频繁出现的某段操作为单个方法;
将一个文件内的多个顶级类拆分到不同的文件中(内部类不拆分);
匿名类与非匿名类的转换;
匿名类与函数表达式的转换;
函数式调用与普通调用的转换;修改的原则是:尽量少地修改,且不改变原有的代码逻辑与运行结果(涉及到多线程的代码有些迷)
修改的目的是:增强可读性,以及便于插入笔记
相关链接
脚注
Commit信息中的emoji
参考来源: