阅读 openjdk 源码环境准备

熟悉 Java 的同学天天和各类 class 打交道,除了按时交付功能外,早晚会遇到一些棘手问题,比如 synchroinzed 与 ReentrantLock 差别在那里,GC 为何频繁发生,要回答这些问题,除了借助于 Google 搜索,更有效的途径就是 read the fucking source code,只不过这捷径入门门槛对于不会写 C/C++ 的同学来说有些高。
但凡事皆有起始,在喜欢的编辑器里去浏览无数前辈们的智慧成果,这不得不说是种精神享受。这篇文章说下我阅读 openjdk 源码的一些准备工作,帮助后来有类似需求的同学。

环境

  • MacOS + brew
  • Emacs + Ctags 浏览代码,主要是代码跳转
  • Mercurial 下载源码用,本文也提供网盘下载链接,方便网速不好的同学使用。

准备

# 使用 Mercurial 下载源码
# 这里的 jdk8u 表示的是 jdk8 的 update,是 jdk8 的超集。推荐下载这个
hg clone http://hg.openjdk.java.net/jdk8u/jdk8u jdk8u
cd jdk8u
# 下载子项目
bash get_source.sh
# 也可以把 jdk10 一起下载下来
hg clone http://hg.openjdk.java.net/jdk10/jdk10 jdk10

国内下载代码比较慢,而且容易中断,我是专门找了个 US 的 vps 下载,然后 scp 到本地,为方便大家使用,可以去下面的网盘地址下载(包含2个 tar 文件)

链接: https://pan.baidu.com/s/1DOemBTVj-oIk8DBxknq_nw 提取码: yrib

-rw-r--r--  1 staff  staff   578M Jan  6 11:03 jdk10.tar.gz
-rw-r--r--  1 staff  staff   363M Jan  5 12:55 jdk8u.tar.gz

下完源码后,就可以在自己喜欢的编辑器里去浏览了,Ctags 可以生成代码的索引,常用的编辑器,如 Vim/Emacs 都可以去识别

# Mac 自带的 xcode 有 ctags 命令,但是不支持 -R 选项,所以需要通过 brew 重新安装下
# 参考:https://gist.github.com/nazgob/1570678
brew install ctags
cd jdk8u
ctags -Re .

这样就能够在 jdk8u 这个目录里生成 TAGS 文件,大概 8.7M,在 Emacs 里面的使用效果(M+. 跳转到定义的地方,M+, 跳回来)

emacs_ctags.gif

好了,有了代码跳转对于阅读源码已经足够了。

推荐阅读

  • https://adoptopenjdk.gitbooks.io/adoptopenjdk-getting-started-kit/en/
    这里面有很详细的教程,一步步熟悉 openjdk 这个庞大系统
  • http://cr.openjdk.java.net/~ihse/demo-new-build-readme/common/doc/building.html

你可能感兴趣的:(阅读 openjdk 源码环境准备)