Contents

JDK1.8 源代码阅读环境搭建

一、准备

Itellj IDEA, jdk1.8 的源代码包(解压 jdk 目录下的 src.zip 包得到)

二、项目结构

IDEA 创建一个普通的 java 项目 https://img-blog.csdnimg.cn/20200511113652329.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2N4cTIxMTE1MDQxMDQ=,size_16,color_FFFFFF,t_70 把解压得到的 jdk1.8 的源代码复制到 source 目录下: https://img-blog.csdnimg.cn/20200511113748267.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2N4cTIxMTE1MDQxMDQ=,size_16,color_FFFFFF,t_70 test 目录用来写测试用例, 这里用不到 Main 方法。

三、IDEA 设置

  1. Project Structure -> Project 设置项目的 SDK (jdk8u221),language level 选择 8 - Lambdas, type annotations etc. https://img-blog.csdnimg.cn/20200511114245184.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2N4cTIxMTE1MDQxMDQ=,size_16,color_FFFFFF,t_70
  2. Project Structure -> Dependencies 选择 Modules,SDK 选择 1.8_221 https://img-blog.csdnimg.cn/2020051111442075.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2N4cTIxMTE1MDQxMDQ=,size_16,color_FFFFFF,t_70
  3. 设置平台的 SDK 源代码路径为自己项目的 source 目录 https://img-blog.csdnimg.cn/20200511114621171.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2N4cTIxMTE1MDQxMDQ=,size_16,color_FFFFFF,t_70
  4. 调整编译线程的堆大小,避免内存不足,编译无法通过,调整到 1G 以上。 https://img-blog.csdnimg.cn/20200511114759326.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2N4cTIxMTE1MDQxMDQ=,size_16,color_FFFFFF,t_70
  5. IDEA 默认调试是不会进入到 jdk 的源代码的,在 Debugger 设置中允许进入到 jdk 的包 https://img-blog.csdnimg.cn/20200511115000586.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2N4cTIxMTE1MDQxMDQ=,size_16,color_FFFFFF,t_70 到这里,我们完成了 idea 的设置,可以开始写个测试程序编译运行。

四、编译调式

创建一个测试类进行调试:

import java.util.HashMap;
import java.util.Map;

public class Test {

    public static void main(String[] args) {
        Map<String, Double> hashMap = new HashMap<>();

        hashMap.put("k1", 0.1);
        hashMap.put("k2", 0.2);
        hashMap.put("k3", 0.3);
        hashMap.put("k4", 0.4);
    }
}

进入 debug 之后,就可以在源代码里写一些笔记了。 https://img-blog.csdnimg.cn/20200511115402489.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2N4cTIxMTE1MDQxMDQ=,size_16,color_FFFFFF,t_70

五、编译问题

经常碰到的几个问题:

  1. 缺少com.sun.tools包
  2. 缺少sun.awt.UNIXToolkit 和 sun.font.FontConfigManager这两个类

解决办法可以参考这篇博客:JDK1.8源码分析03之idea搭建源码阅读环境