{"id":15069338,"url":"https://github.com/kangjianwei/learningjdk","last_synced_at":"2025-05-16T00:04:47.570Z","repository":{"id":37677793,"uuid":"153166613","full_name":"kangjianwei/LearningJDK","owner":"kangjianwei","description":"JDK源码阅读笔记","archived":false,"fork":false,"pushed_at":"2022-03-28T15:23:35.000Z","size":47508,"stargazers_count":1542,"open_issues_count":2,"forks_count":671,"subscribers_count":69,"default_branch":"master","last_synced_at":"2025-05-16T00:04:40.134Z","etag":null,"topics":["java","jdk","jdk-oracle","openjdk","source-code","study-notes"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kangjianwei.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-10-15T19:00:41.000Z","updated_at":"2025-05-13T03:59:53.000Z","dependencies_parsed_at":"2022-07-12T16:42:57.115Z","dependency_job_id":null,"html_url":"https://github.com/kangjianwei/LearningJDK","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kangjianwei%2FLearningJDK","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kangjianwei%2FLearningJDK/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kangjianwei%2FLearningJDK/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kangjianwei%2FLearningJDK/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kangjianwei","download_url":"https://codeload.github.com/kangjianwei/LearningJDK/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254442854,"owners_count":22071878,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","jdk","jdk-oracle","openjdk","source-code","study-notes"],"created_at":"2024-09-25T01:41:53.396Z","updated_at":"2025-05-16T00:04:42.554Z","avatar_url":"https://github.com/kangjianwei.png","language":"Java","readme":"# JDK源码阅读笔记\n\n\u003e **Read The Fucking Source Code**　　---- [RTFM](https://en.wikipedia.org/wiki/RTFM)\n\u003e     \n\u003e **源码面前，了无秘密**　　---- [侯捷](https://zh.wikipedia.org/wiki/%E4%BE%AF%E4%BF%8A%E5%82%91_%28%E4%BD%9C%E5%AE%B6%29)\n\n\n## 项目介绍\n\n本项目主要整理/记录阅读`JDK`源码时的理解与体会，仅供参考。\n\n项目中包含多个分支，主分支命名为`master`，测试分支命名为`test`，源码/笔记分支以`JDK-X`（**X是JDK版本**）命名。\n\n* `master`分支不定期汇总源码笔记与测试代码的快照。\n\n* `JDK-X`分支存放`JDK`的**源码**与**笔记**。阅读过程中产生的笔记以**注释**的形式直接写在源码文件中。\n\n* `test`分支存放辅助理解的**测试代码**，可直接运行。\n  * 注1：建议在`OracleJDK`/`OpenJDK` 11的环境下运行测试文件\n  * 注2：不会为所有类/接口都写测试文件，有的是因为太简单，有的是因为已写过大量类似的，还有的是因为理解不到位\n\n\n## 使用说明\n\n1. 开箱即用。将项目克隆/下载到本地，然后使用`IntelliJ IDEA`打开即可。\n    \n2. 阅读源码时请切换到`JDK-X`分支，且**不需要**关联`JDK`。\n    \n   测试源码时请切换到`test`分支，此时需要关联`OracleJDK`/`OpenJDK`。\n    \n3. 该源码**不支持**直接编译。如想完整编译整个`JDK`项目，请参考官方教程[Building the JDK](https://hg.openjdk.java.net/jdk/jdk11/raw-file/tip/doc/building.html)。\n    \n4. 如果源码因缺失个别依赖文件而报错，请到谷歌搜索相关的jar包导入即可。或者可在[Github Issues](https://github.com/kangjianwei/LearningJDK/issues)提出反馈。\n    \n5. **欢迎在[Github Issues](https://github.com/kangjianwei/LearningJDK/issues)交流好的想法、建议、意见。**\n    \n\n\n## Commit图例\n\n| 序号 |       emoji        |                           在本项目中的含义                            |       简写标记        |\n| ---- | ------------------ | ------------------------------------------------------------------- | -------------------- |\n| (0) | :tada:             | 初始化项目                                                           | `:tada:`             |\n| (1) | :memo:             | 更新文档，包括但不限于README                                           | `:memo:`             |\n| (2) | :bulb:             | 发布新的阅读笔记 \u003csub\u003e**(注1)**\u003c/sub\u003e                                 | `:bulb:`             |\n| (3) | :sparkles:         | 增量更新阅读笔记                                                      | `:sparkles:`         |\n| (4) | :recycle:          | 重构，主要指修改已有的阅读笔记，极少情形下会修改源码 \u003csub\u003e**(注2)**\u003c/sub\u003e | `:recycle:`          |\n| (5) | :pencil2:          | 校对，主要指更正错别字、调整源码分组、修改源码排版等                      | `:pencil2:`          |\n| (6) | :white_check_mark: | 发布测试文件                                                         | `:white_check_mark:` |\n    \n\u003e     \n\u003e 注1：     \n\u003e      \n\u003e 关于某个源码当前的阅读进度，请参考[已阅代码清单_按功能排序](已阅代码清单_按功能排序.md)。    \n\u003e    \n\u003e 注2：涉及到修改源码的场景，包括但不限于：   \n\u003e      \n\u003e\u003e 修改无意义的变量名为更易懂的变量名；        \n\u003e\u003e 补全控制语句作用域上的花括号；    \n\u003e\u003e 重构控制语句结构(如if语句的拆分，for/while的互换)；    \n\u003e\u003e for循环和foreach循环的转换；    \n\u003e\u003e 拆分过长且难读的调用链，将中间过程单独摘出来；      \n\u003e\u003e 提取频繁出现的某段操作为单个方法；      \n\u003e\u003e 将一个文件内的多个顶级类拆分到不同的文件中(内部类不拆分)；       \n\u003e\u003e 匿名类与非匿名类的转换；    \n\u003e\u003e 匿名类与函数表达式的转换；    \n\u003e\u003e 函数式调用与普通调用的转换；            \n\u003e       \n\u003e 修改的原则是：尽量少地修改，且**不改变**原有的代码逻辑与运行结果（涉及到多线程的代码有些迷）    \n\u003e 修改的目的是：增强可读性，以及便于插入笔记    \n    \n\n\n## 相关链接\n    \n[Oracle JDK](https://www.oracle.com/technetwork/java/javase/archive-139210.html)    \n    \n[Open JDK](http://jdk.java.net/archive)    \n    \n    \n## 脚注\n    \nCommit信息中的`emoji`参考来源：\n    \n* [Full Emoji List](https://unicode.org/emoji/charts/full-emoji-list.html)   \n   \n* [gitmoji](https://gitmoji.carloscuesta.me/)    \n\n## 附录\n   \n#### [已阅代码清单_按功能排序](已阅代码清单_按功能排序.md)    \n#### [已阅代码清单_按名称排序](已阅代码清单_按名称排序.md)    \n#### [测试文件清单](测试文件清单.md)    \n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkangjianwei%2Flearningjdk","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkangjianwei%2Flearningjdk","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkangjianwei%2Flearningjdk/lists"}