Java 的前世今生:从 Oak 到现代企业级语言
从事 Java 多年,总想系统梳理一下这门语言的来龙去脉。本文从历史、版本、生态到学习路径,带你重新认识 Java。
一、Java 的历史:诞生、名字与创始人
1.1 缘起:Green 项目与 Oak
Java 的诞生可以追溯到 1991 年 。当时 Sun Microsystems 成立了一个名为 「Green Project」 的小组,目标是为交互式电视、嵌入式设备设计一种新的编程语言------可以理解为早期的「物联网」控制器语言。
- James Gosling 是项目的技术负责人,也是 Java 语言的主要设计者。
- 与他一起参与的有 Mike Sheridan 、Patrick Naughton 等人。
- 最初的目标设备是 Star7------一台带 5 英寸彩色 LCD 屏的手持无线个人数字助理(PDA),但这款产品并未在市场上成功。
1.2 从 Oak 到 Java
- 语言最初的名字是 Oak(橡树),据说来自 Gosling 办公室窗外的一棵橡树。
- 后来商标检索发现 Oak 已被 Oak Technology 使用,于是必须另起新名。
1.3 为啥叫 Java?
- 「Java」本意是咖啡 :印尼的 爪哇岛(Java) 在 17 世纪末被荷兰人引入种植咖啡,后来「Java」在英语里常被当作咖啡的别称(如「a cup of Java」)。
- Sun 团队选名的过程 :大约 1995 年 1 月 ,团队头脑风暴出十来个候选名,经法务检索后只剩三个可用:Java、DNA、Silk 。时任 Oak 产品经理的 Kim Polese 拍板选了 Java ------她希望名字能体现技术的特质:动感、革命性、有活力、有趣,又要好记、好拼、好念,还不能太「极客」或太像当时的网络热词。Java 这几个字母简短、好读,又和程序员常喝的咖啡挂钩,于是就这么定下来了。
- 1995 年 5 月 23 日 ,Sun 正式发布 Java 1.0。后来《时代》杂志把 Java 评为 1995 年十大最佳产品之一,这个名字也一起成了经典。
1.4 设计哲学
Gosling 曾把 Java 形容为 「没有枪和刀的 C++」(C++ without guns and knives),强调:
- 自动内存管理(垃圾回收),减少 C++ 式的内存错误。
- 「一次编写,到处运行」 (Write Once, Run Anywhere),通过 JVM 实现跨平台。
- 类型安全、面向对象,更适合构建大型、可维护的系统。
恰好当时 万维网(WWW) 兴起,Java 凭借 Applet 和跨平台能力迅速与 Web 结合,从一款「失败消费电子项目」的语言,演变成企业级与互联网的通用语言。
2010 年 Oracle 收购 Sun 后,Java 的维护与演进由 Oracle 主导,社区则通过 OpenJDK 参与。
二、不同版本及特性:重要版本、企业常用与值得研究的版本
2.1 发布节奏的变化
- 早期:大版本间隔较长(如 1.0 → 1.1 → 1.2 ...)。
- 2017 年 9 月起 :改为 每 6 个月一个特性版本,主版本号按年份或顺序递增(如 9、10、11...17、21)。
- LTS(Long-Term Support):并非每个版本都是 LTS,企业更关注 LTS 的长期支持与兼容性。
2.2 重要版本与特性概览
| 版本 | 发布时间 | 定位 | 重要特性(简述) |
|---|---|---|---|
| JDK 8 | 2014-03 | LTS,至今企业使用最广 | Lambda、Stream API、新日期时间 API、接口默认/静态方法 |
| JDK 9 | 2017-09 | 首个 6 月节奏版本 | 模块系统(JPMS)、JShell、HTTP/2 Client、多版本 JAR |
| JDK 11 | 2018-09 | LTS | 局部变量 var、HTTP Client API 正式化、ZGC 实验、移除部分遗留 API |
| JDK 17 | 2021-09 | LTS | 密封类、模式匹配增强、新 LTS 周期开始 |
| JDK 21 | 2023-09 | LTS | 虚拟线程(Project Loom)、Record 模式、String Template 预览等 |
2.3 企业选型与学习侧重
- 企业选型 :目前以 8 / 11 / 17 为主力,新项目建议直接上 17 或 21;从 8 升级时,11 是常见过渡版本。
- 学习侧重 :想理解「现代 Java」写法可从 8 (Lambda、Stream)入手;想理解 JDK 与库的架构可重点看 9 (模块系统);17 / 21 的密封类、模式匹配、虚拟线程等代表语言与运行时的演进方向。
三、Java、JDK、JRE 的关系(结合官网概念图)
Oracle 在文档中通过 Java 概念图(Java Conceptual Diagram) 把组件按层次组织:上层依赖下层,下层是上层的基础。
3.1 文档与图示来源
- 文字说明 :Description of Java Conceptual Diagram
- 本专栏在《看完 JDK、Spring 官方架构图,我发现:大厂的图也就这样!》中曾引用并解析过 JDK 架构图,可与下文对照看。

3.2 概念层次(自底向上)
从下到上大致为:
-
Java Virtual Machine(JVM)
- 如 HotSpot VM,负责执行字节码、GC、JIT 等。
-
lang and util Base Libraries
- 语言与工具基础库:集合、并发、反射、正则、日志等。
-
Other Base Libraries
- 如 JDBC、JNDI、RMI、安全、序列化、XML 等。
-
Integration Libraries
- 与外部系统集成的库。
-
User Interface Toolkits
- AWT、Swing、JavaFX、2D、打印等(注:不同 JDK 版本中 JavaFX 归属可能不同)。
-
Deployment
- 如 Java Web Start、Applet/Plugin(很多已废弃)。
-
Tools & Tool APIs
javac、java、javadoc、jar、javap、JPDA、JConsole、VisualVM 等。
-
Java Language
- 语言规范与语法。
3.3 JDK、JRE、Java 的关系(对应官网描述)
-
JDK(Java Development Kit)
- 包含上述所有层次 :JVM + 各类库 + 部署 + 开发与诊断工具。
- 开发、编译、调试、性能分析都需要 JDK。
-
JRE(Java Runtime Environment)
- 只包含运行 所需部分:
Deployment、User Interface Toolkits、Integration Libraries、Other Base Libraries、lang and util Base Libraries、JVM。 - 不包含:编译器(javac)、开发/诊断工具(如 javadoc、javap、JConsole 等)以及「Java Language」「Tools & Tool APIs」层。
- 也就是说:JRE = 运行环境;JDK = JRE + 开发与工具链。
- 只包含运行 所需部分:
-
「Java」
- 通常指语言 + 平台(JVM + 标准库)的整体;在官网概念图里对应「Java Language」及以下各层组成的平台。
-
一句话 :Java = 语言 + 平台;JRE = 只负责运行;JDK = JRE + 编译、打包、文档、调试、监控等开发与工具。
四、Java 官网比较有价值的内容推荐
4.1 入门与学习路径
-
- 经典官方教程,按「Trail」组织;Getting Started 即第一课(什么是 Java、Hello World、各平台说明),适合零基础,之后是语言基础、集合、并发、GUI 等。
- 注意:主体内容基于 JDK 8,适合打基础;新特性建议配合 Dev.java 一起看。
-
- Oracle 当前主推的 Java 学习站点:入门手册、最新语法、新特性在这里更新,含环境搭建、语言基础、OOP、Lambda、Record、模式匹配、集合、模块、预览特性等。推荐作为「入门 + 跟上新版本」的主入口。
4.2 API 与规范
-
- 按版本选择(如 8/11/17/21),查类、方法、包说明,日常开发必备。
-
Java Language and VM Specification
- 语言规范(JLS)与虚拟机规范(JVMS),做深入实现、面试、源码阅读时有用。
4.3 版本与迁移
-
Oracle Java SE Support Roadmap
- 各版本支持时间、LTS 策略,做技术选型与升级计划时必看。
-
Significant Changes in the JDK
- 各版本重要变更、废弃/移除 API,迁移前建议通读对应目标版本。
4.4 小结
- 入门/手册 :优先 Dev.java + The Java Tutorials(Getting Started + Learning the Java Language)。
- 查 API:Java SE API Documentation(按你使用的 JDK 版本选)。
- 选型与升级:Support Roadmap + Significant Changes。
五、如何给 JDK 贡献源码
JDK 的协作开发主要在 OpenJDK 上进行,而不是某个单一发行版。下面流程以 OpenJDK 为主。
5.1 官方入口与角色
- 贡献指南 :OpenJDK: Contributing to an OpenJDK Project
- 开发者指南 :OpenJDK Developers' Guide(开发流程、工具、规范)
- Dev.java 上的简述 :Contributing to OpenJDK
常见角色大致为:
| 角色 | 说明 |
|---|---|
| Participant | 订阅邮件列表,可提交简单补丁 |
| Author | 贡献若干变更(如约 2 个)+ 签署 OCA,获得 JBS 账号 |
| Committer | 贡献达到一定数量(如约 8 个),可自行推送,无需 Sponsor |
| Reviewer | 贡献更多且重要(如约 32 个),可评审他人变更 |
| Project Lead | 负责项目方向与决策 |
5.2 实际操作建议
-
读邮件列表
- 了解当前在讨论什么、代码风格和流程习惯,再发补丁或讨论。
-
签署 OCA(Oracle Contribution Agreement)
- 成为 Author、使用 JBS(JDK Bug System)提交/关联 issue 通常需要先签 OCA。
-
从「小」开始
- 文档、测试、小 bug 修复、拼写/注释改进,比一开始改核心 VM 更容易被接纳。
-
按 Developers' Guide 来:代码风格、clone/构建、提交 webrev、Code Review 等见上文开发者指南。
-
源码与仓库
- 源码:GitHub - openjdk 或 Mercurial - hg.openjdk.org
- 开发者指南仓库:openjdk/guide
坚持按社区流程来,从小贡献积累,就有机会从 Participant 成长为 Author、Committer 甚至 Reviewer。
六、如何学习 JDK:源码与设计思想
6.1 从「用」到「看」
- 先熟练使用某块 API(如集合、并发、NIO),再带着「它是怎么实现的」去看源码,比直接硬啃整个 JDK 更有效。
- 建议从
java.util(如ArrayList、HashMap、ConcurrentHashMap)、java.util.concurrent(如ThreadPoolExecutor、ReentrantLock)开始,和日常开发最相关。
6.2 结合官方设计文档
-
JEP(JDK Enhancement Proposal)
- OpenJDK JEP 列表:每个重要特性都有动机、方案、影响,先读 JEP 再读代码,能更快抓住「为什么要这样设计」。
-
JEP 201 (Modular Source Code):了解 JDK 9 之后的模块化源码结构(
src/$MODULE/、share/、各 OS 目录、native/等),便于在源码里导航。 -
Inside Java
- inside.java:官方博客,常会讲解新特性、设计取舍,适合理解「设计思想」。
6.3 设计思想上的几条线
-
模块系统(JPMS)
- 可靠配置与强封装,替代 classpath 的混乱,可结合 JEP 261 与上文 JEP 201 学习。
-
集合与并发
- 接口与实现分离、不可变与线程安全的设计(如
CopyOnWriteArrayList、ConcurrentHashMap的分段/ CAS),能学到很多实用设计模式。
- 接口与实现分离、不可变与线程安全的设计(如
-
JVM 与 GC
- 若对运行时感兴趣,可看 HotSpot 相关文档与源码结构(如
src/hotspot/),再配合《深入理解 Java 虚拟机》等书。
- 若对运行时感兴趣,可看 HotSpot 相关文档与源码结构(如
6.4 阅读顺序建议
选一个常用包/类(如 HashMap 或 ThreadPoolExecutor)→ 在 API 文档看接口与用法 → 若有对应 JEP 先读 JEP → 再看源码(字段、构造、核心方法)→ 用调试器单步跟关键逻辑,比纯看代码更容易形成记忆。
七、优秀的英文 Java 资源:视频、博客与教程
7.1 官方与半官方
Dev.java 、The Java Tutorials 、Inside Java 的说明与链接见第四节;这里仅作索引:dev.java | Java Tutorials | inside.java。
7.2 博客与文字教程
-
Baeldung
- baeldung.com:Java、Spring、测试、并发等,文章结构清晰,适合查「怎么做」和「对比」。
-
Jenkov Java Tutorials
- jenkov.com/tutorials/java:从基础到 Lambda、Stream、模块、Record,更新到较新版本,适合系统扫一遍。
7.3 视频与课程
-
Java Brains
- javabrains.io:大量 YouTube 视频 + 系统课程,从基础到进阶,适合喜欢「听+看」的学习方式。
-
Oracle University / YouTube
- Oracle 官方频道和 Dev.java 上的视频,适合配合新版本特性学习。
7.4 规范与进阶
- JLS / JVMS:链接见 4.2,适合在「会用」之后抠语义和实现细节。
- OpenJDK 邮件列表与 JEP:参与讨论、读 JEP,能接触到社区的真实设计和权衡,对「设计思想」帮助很大。
小结
- 历史:Green 项目 → Oak → Java 1.0,Gosling 与 Sun 奠定「安全、跨平台、可维护」的基调,后由 Oracle 与 OpenJDK 社区共同演进。
- 版本:JDK 8/11/17/21 是当前企业中最常见和值得投入的 LTS;9 的模块系统是理解现代 JDK 结构的关键。
- Java / JDK / JRE:语言+平台 / 开发套件(含工具)/ 仅运行环境,官网概念图按层次描述得很清楚,可结合本地「JDK 架构图」一起看。
- 官网 :入门与手册用 Dev.java + The Java Tutorials,查 API 用 Java SE Documentation,选型与迁移看 Support Roadmap 和 Significant Changes。
- 贡献:从 OpenJDK 的贡献指南和 Developers' Guide 入手,从小 patch 和文档开始,逐步熟悉流程和角色。
- 学习 JDK:从常用 API 和对应 JEP 入手,再看源码和 Inside Java,结合调试和书籍理解设计思想。
- 英文资源:Dev.java、Baeldung、Jenkov、Java Brains、JLS/JVMS 和 OpenJDK 社区,足够支撑从入门到进阶再到参与社区。
具体阅读与实操路径见第六节「阅读顺序建议」。
参考资料(建议收藏)