倚楼听风雨
淡看江湖路

IntelliJ IDEA 导入 JDK 1.8 源码教程

一、前提

作为一名 Java 程序员,写了一定的程度的业务代码之后,最需要了解的就是 Java 的运行机制以及一些底层原理,比如 JVM 的一些核心知识,比如并发编程的各种底层类的底层原理,这些知识对你的跳槽找工作面试以及工作过程中对业务能力深入追究都是必要的。这个时候就要每个 Java 程序员都要有能阅读 JDK 源码的能力,从源码底层我们要看 HashMap 是咋写的,要看 List 的默认容量,看 AQS 是如何实现的等等。

这些东西你可以从各种书籍中直接获取,但是系统化的对源码进行阅读和整理才会帮助你加深对 Java 底层的理解,所以阅读源码的工作必不可少。本文简单的介绍一下在 idea 中,如何导入 JDK 源码,从而自己可以对源码进行修改,加上自己的中文注释,最后根据自己学习习惯去整理自己的 Java 知识。

二、开发环境

开发环境因人而异,没有绝对的限制,一般源码导入的过程遇到的问题也大同小异,逃不出那几个。说一下老四的开发环境:

  1. IntelliJ IDEA 2019.3.3 (Ultimate Edition)
  2. jdk1.8.0 221 源码包

我们下载的 JDK 就自带这个源码包,Windows 环境下就在你 JDK 安装的木里面有一个「src.zip」,macOS 下的目录如果是安装程序版本安装的 JDK,路径一般是「/Library/Java/JavaVirtualMachines/jdk1.8.0 221.jdk/Contents/Home」。当然你也可以用 OpenJDK,不过 OpenJDK 一般在我们自己编译 Java 虚拟机的时候才使用它,阅读源码的话使用 Oracle 官方自带的即可。

三、JDK 源码导入 idea 工程中

源码引入的方式比较简单,新建一个 Java Project,然后将「src.zip」加压之后的目录都放入到新建工程的「src」目录包下即可。效果如下图:

IntelliJ IDEA 导入 JDK 1.8 源码教程的图片-高老四博客 第1张

这样就完成了源码的导入,接下来就是编译源码,写一个主测试类,main() 方法中随意打印一句话即可,然后执行,就是在 JDK 源码编译的过程中我们可能会遇到各种各样的奇怪问题,老四经验不是那么多,这里只写自己遇到的。

四、源码编译过程中问题汇总

内存溢出问题

老四编译的过程中首先报了「Error:java: java.lang.OutOfMemoryError: Java heap space」内存溢出的错误。也有可能是「Error:java: OutOfMemoryError: insufficient memory」这样的提示。

IntelliJ IDEA 导入 JDK 1.8 源码教程的图片-高老四博客 第2张

这是由于你本身 JVM 堆内存不够的原因,一般默认是 700M,可以根据自己条件按需配置,老四这里将其升级到 1024M。

IntelliJ IDEA 导入 JDK 1.8 源码教程的图片-高老四博客 第3张

查阅代码变量、方法关联问题的解决

当我们开始学习源码的时候,比如我们看 HashMap 的equals 方法源码,当我们想看方法里面的 Objects.equals 方法的源码的时候,此时我们直接跳转的并不会是我们导入的 Objects 对象的文件的源码,而是跳转到了我们项目配置的 JDK 源码包「src.zip」里面,但是 src.zip 原生源码包中默认只读,不允许你编辑的。

我们在学习查看的时候,按照需求,我们是要跳转到我们自己引入的 Objects.java 文件中去的,这样我们才能对 JDK 源码随意的编辑注释或者修改等。所以这里也需要配置一下。

路径:File -> Project Structure -> SDKs,新增一个或者说复制一个 JDK 环境配置,在新的 JDK 中源码路径配置为我们引入的 JDK 的源码路径即可。

IntelliJ IDEA 导入 JDK 1.8 源码教程的图片-高老四博客 第4张

接着新增 JDK 之后,我们将当前的源码项目的运行 JDK 依赖修改为我们自己新增的 JDK 环境。

IntelliJ IDEA 导入 JDK 1.8 源码教程的图片-高老四博客 第5张

其实 JDK 的源码导入并不一定会像老四这么顺利,但是由于 idea 的强大,很多时候当你打开一个普遍的项目,他都知道你要干嘛,这给我门在环境配置的过程中节省了不少力气。如果以后老四在这个源码导入的重复过程中遇到新的问题,还会继续更新此文章。

五、相关阅读

  1. IntelliJ IDEA 导入 Spring 源码教程
  2. 零碎的Java由浅入深的知识点整理版随手笔记第二期 持续更新
  3. 浅析Java反射系列相关基础知识(上)之类的加载以及反射的基本应用
  4. Java十一道由浅入深的笔面试题第二期 详细解析

更博不易,如果觉得文章对你有帮助并且有能力的老铁烦请捐赠盒烟钱,点我去赞助。或者扫描文章下面的微信/支付宝二维码打赏任意金额(点击「给你买杜蕾斯」),也可扫描小站放的支付宝领红包二维码,线下支付享受优惠的同时老四也可以获得对应赏金,老四这里抱拳谢谢诸位了。捐赠时请备注姓名或者昵称,因为您的署名会出现在赞赏列表页面,您的捐赠钱财也会被用于小站的服务器运维上面,再次抱拳感谢。

赞(18) 给你买杜蕾斯
本站原创文章受自媒体平台原创保护,未经允许不得转载高老四博客 » IntelliJ IDEA 导入 JDK 1.8 源码教程

开始你的表演 抢沙发

觉得文章有用就打赏一下老四,鼓励我更好的创作

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册