GithubHelp home page GithubHelp logo

learningjdk's Introduction

JDK源码阅读笔记

Read The Fucking Source Code  ---- RTFM

源码面前,了无秘密  ---- 侯捷

项目介绍

本项目主要整理/记录阅读JDK源码时的理解与体会,仅供参考。

项目中包含多个分支,主分支命名为master,测试分支命名为test,源码/笔记分支以JDK-XX是JDK版本)命名。

  • master分支不定期汇总源码笔记与测试代码的快照。

  • JDK-X分支存放JDK源码笔记。阅读过程中产生的笔记以注释的形式直接写在源码文件中。

  • test分支存放辅助理解的测试代码,可直接运行。

    • 注1:建议在OracleJDK/OpenJDK 11的环境下运行测试文件
    • 注2:不会为所有类/接口都写测试文件,有的是因为太简单,有的是因为已写过大量类似的,还有的是因为理解不到位

使用说明

  1. 开箱即用。将项目克隆/下载到本地,然后使用IntelliJ IDEA打开即可。

  2. 阅读源码时请切换到JDK-X分支,且不需要关联JDK

    测试源码时请切换到test分支,此时需要关联OracleJDK/OpenJDK

  3. 该源码不支持直接编译。如想完整编译整个JDK项目,请参考官方教程Building the JDK

  4. 如果源码因缺失个别依赖文件而报错,请到谷歌搜索相关的jar包导入即可。或者可在Github Issues提出反馈。

  5. 欢迎在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循环的转换;
拆分过长且难读的调用链,将中间过程单独摘出来;
提取频繁出现的某段操作为单个方法;
将一个文件内的多个顶级类拆分到不同的文件中(内部类不拆分);
匿名类与非匿名类的转换;
匿名类与函数表达式的转换;
函数式调用与普通调用的转换;

修改的原则是:尽量少地修改,且不改变原有的代码逻辑与运行结果(涉及到多线程的代码有些迷)
修改的目的是:增强可读性,以及便于插入笔记

相关链接

Oracle JDK

Open JDK

脚注

Commit信息中的emoji参考来源:

附录

learningjdk's People

Contributors

kangjianwei avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

learningjdk's Issues

Byte.compare(a,b)方法解读错误

项目中Byte类中的两个方法解读如下:
// 比较两个byte(按自然顺序比较)
public static int compare(byte x, byte y) {
return x - y;
}

// 比较两个Byte(按自然顺序比较)
public int compareTo(Byte anotherByte) {
    return compare(this.value, anotherByte.value);
}

更正:
源码中,compare(x,y)返回的是 x - y ,而并非是按顺序比较。

测试代码:
Byte a =1 ;
Byte b = -128;
System.out.println("compare结果" + Byte.compare(a,b)); // 1 - (-128) = 129
System.out.println("compareTo结果" + a.compareTo(b));// 1 - (-128) = 129

测试报错问题

为什么我切换到test分支运行代码时有如下的错误,看错误意思是jar的问题?因为第一次使用idea,还请大佬帮忙指导一下。多谢了🙏🙏🙏
截屏2019-12-24下午10 44 06

idea调试问题

咨询一下,如何用idea实现不关联jdk?

运行BreakIteratorTest01,部分报错信息
Information:java: at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:104)
Information:java: at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl$$Lambda$129/0x00000008003bc040.call(Unknown Source)
Information:java: Errors occurred while compiling module 'OpenJDK-11'
Information:javac 11 was used to compile java sources
Error:java: OutOfMemoryError: insufficient memory

能否在jdk源代码中添加System.out.println语句

你好,最近在学习jdk源码,遇到了一点问题。
比如说我写了一个测试类:

 public static void main(String[] args) {
        String string = new String();
        System.out.println(string.length());
    }

然后修改jdk的string源代码:

   public String() {
        System.out.println("abc");
        this.value = "a".value;
    }

这时候我发现,abc并不会打印。

你的项目能否实现对jdk代码的自行修改并输出呢?
感谢🙏

支持下..

支持下,分析源码对成长很有帮助,如果能列出来目前已经分析完的源码清单就好了。

关联jdk后,文件冲突

在本地用idea打开并关联了jdk11,切换test分支,运行测试用例时报错。。错误如下图
image
打开文件后,有波浪提示错误,按照idea提供的解决方法,添加了add-exports命令 如下图
2
运行测试文件后依然报同样的错误,请教下怎么解决

Class类isLocalOrAnonymousClass翻译有误

 */
// X.class.isLocalClass() ==> 判断X是否为方法内部类
public boolean isLocalClass() {
    return isLocalOrAnonymousClass() && (isArray() || getSimpleBinaryName0() != null);
}

应该为‘本地类’

源码注释显示问题?

你好,最近正在研究源码,你写的内容帮助很大,正在学习,多谢了,在看Objects类的源码时看到文件的注释中有黑色的条块,不知是什么原因引起的
image

项目的时间线是不是有点问题

现在是2020年2月, 作者的项目更新时间都到2020年6月了, 是否在系统日期还是哪里有些问题呢?

✏️ 系统内置的MIME表 康建伟 2020/6/23 22:04
💡 【sun.net.www.MimeTable】 MIME表 康建伟 2020/6/23 22:01
💡 【sun.net.www.MimeLauncher】 对指定输入源中的数据执行预设的命令 康建伟 2020/6/22 23:18
💡 【sun.net.www.MimeEntry】 MIME实体 康建伟 2020/6/21 22:30
💡 【sun.net.www.MessageHeader】 消息头,是一个键值对容器,通常可用来存储MIME信息头、请求头、响应头等 康建伟 2020/6/20 21:42

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.