为了搞 JDK 源码阅读环境,费劲周折,遇到各种问题。现在来最后总结。
参考
- 新建项目 jdk-src-learning
- 在安装JDK的位置找到src.zip,解压src.zip放到新建好的项目的src目录下
- 在Project Structure->SDKs中,把 1.8 复制一份 my-jdk-1.8,在Sourcepath中把src.zip换成当前目录下的 src,这样在代码调试时能自动关联上源码
- 在 IDEA,Project Structure->Libraries 中添加 jdk 目录下的 lib,解决编译时会提示com.sun.tools下的一堆类找不到的问题
- 手动添加 sun.awt.UNIXToolkit 和 sun.font.FontConfigManager 这两个类(点进去是官方源码链接)
- idea 里 File->Settings->Compiler->Build process heap size调大一点,改成 2048,解决编译时报内存不足,或者编译过程一直停留在 writing class 的问题
- 在 IDEA 设置中,取消这个勾,这样才能点进JDK源码
- 项目根目录下创建一个 test 目录,再在里面添加 com.myjdk.list.TestArrayList 类,加上几行测试代码,运行,就可以顺利运行了。
public static void main(String[] args) {
// 研究 ArrayList 基础属性、构造方法、get 方法、set 方法、add 方法、remove 方法、扩容方法
List<Integer> integerList = new ArrayList<>();
integerList.add(20);
integerList.add(30);
System.out.println(integerList);
}
换行注释 debug 错行的问题
之后在这里的源码中换行注释,打断点 debug 会出现错行的问题,并且无法显示局部变量,提示 source code does not match bytecode。
这个问题卡了一天。
上面这个可以解决换行注释问题,但是重新编译 JDK 有点太复杂了,尤其在我电脑 Windows 环境下
上面这个可以更简单地解决换行注释问题,不过需要注意,执行完当中的脚本以后,要记得把这个包添加到 IDEA 的 SDKs -> classPath 中,
于是在JDK源码上写换行注释,debug 打断点终于是成功对上行号并且显示局部变量表了
之后关于如何研究源码的问题,可以稍微看看这个文章