Java 的前世今生:从 Oak 到现代企业级语言

Java 的前世今生:从 Oak 到现代企业级语言

从事 Java 多年,总想系统梳理一下这门语言的来龙去脉。本文从历史、版本、生态到学习路径,带你重新认识 Java。


一、Java 的历史:诞生、名字与创始人

1.1 缘起:Green 项目与 Oak

Java 的诞生可以追溯到 1991 年 。当时 Sun Microsystems 成立了一个名为 「Green Project」 的小组,目标是为交互式电视、嵌入式设备设计一种新的编程语言------可以理解为早期的「物联网」控制器语言。

  • James Gosling 是项目的技术负责人,也是 Java 语言的主要设计者。
  • 与他一起参与的有 Mike SheridanPatrick 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 文档与图示来源

3.2 概念层次(自底向上)

从下到上大致为:

  1. Java Virtual Machine(JVM)

    • 如 HotSpot VM,负责执行字节码、GC、JIT 等。
  2. lang and util Base Libraries

    • 语言与工具基础库:集合、并发、反射、正则、日志等。
  3. Other Base Libraries

    • 如 JDBC、JNDI、RMI、安全、序列化、XML 等。
  4. Integration Libraries

    • 与外部系统集成的库。
  5. User Interface Toolkits

    • AWT、Swing、JavaFX、2D、打印等(注:不同 JDK 版本中 JavaFX 归属可能不同)。
  6. Deployment

    • 如 Java Web Start、Applet/Plugin(很多已废弃)。
  7. Tools & Tool APIs

    • javacjavajavadocjarjavap、JPDA、JConsole、VisualVM 等。
  8. 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 入门与学习路径

  • The Java™ Tutorials

    • 经典官方教程,按「Trail」组织;Getting Started 即第一课(什么是 Java、Hello World、各平台说明),适合零基础,之后是语言基础、集合、并发、GUI 等。
    • 注意:主体内容基于 JDK 8,适合打基础;新特性建议配合 Dev.java 一起看。
  • Dev.java --- Learn

    • Oracle 当前主推的 Java 学习站点:入门手册、最新语法、新特性在这里更新,含环境搭建、语言基础、OOP、Lambda、Record、模式匹配、集合、模块、预览特性等。推荐作为「入门 + 跟上新版本」的主入口。

4.2 API 与规范

4.3 版本与迁移

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 官方入口与角色

常见角色大致为:

角色 说明
Participant 订阅邮件列表,可提交简单补丁
Author 贡献若干变更(如约 2 个)+ 签署 OCA,获得 JBS 账号
Committer 贡献达到一定数量(如约 8 个),可自行推送,无需 Sponsor
Reviewer 贡献更多且重要(如约 32 个),可评审他人变更
Project Lead 负责项目方向与决策

5.2 实际操作建议

  1. 读邮件列表

    • 了解当前在讨论什么、代码风格和流程习惯,再发补丁或讨论。
  2. 签署 OCA(Oracle Contribution Agreement)

    • 成为 Author、使用 JBS(JDK Bug System)提交/关联 issue 通常需要先签 OCA。
  3. 从「小」开始

    • 文档、测试、小 bug 修复、拼写/注释改进,比一开始改核心 VM 更容易被接纳。
  4. 按 Developers' Guide 来:代码风格、clone/构建、提交 webrev、Code Review 等见上文开发者指南。

  5. 源码与仓库

坚持按社区流程来,从小贡献积累,就有机会从 Participant 成长为 Author、Committer 甚至 Reviewer。


六、如何学习 JDK:源码与设计思想

6.1 从「用」到「看」

  • 熟练使用某块 API(如集合、并发、NIO),再带着「它是怎么实现的」去看源码,比直接硬啃整个 JDK 更有效。
  • 建议从 java.util (如 ArrayListHashMapConcurrentHashMap)、java.util.concurrent (如 ThreadPoolExecutorReentrantLock)开始,和日常开发最相关。

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 学习。
  • 集合与并发

    • 接口与实现分离、不可变与线程安全的设计(如 CopyOnWriteArrayListConcurrentHashMap 的分段/ CAS),能学到很多实用设计模式。
  • JVM 与 GC

    • 若对运行时感兴趣,可看 HotSpot 相关文档与源码结构(如 src/hotspot/),再配合《深入理解 Java 虚拟机》等书。

6.4 阅读顺序建议

选一个常用包/类(如 HashMapThreadPoolExecutor)→ 在 API 文档看接口与用法 → 若有对应 JEP 先读 JEP → 再看源码(字段、构造、核心方法)→ 用调试器单步跟关键逻辑,比纯看代码更容易形成记忆。


七、优秀的英文 Java 资源:视频、博客与教程

7.1 官方与半官方

Dev.javaThe Java TutorialsInside 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 社区,足够支撑从入门到进阶再到参与社区。

具体阅读与实操路径见第六节「阅读顺序建议」。


参考资料(建议收藏)

相关推荐
啟明起鸣2 小时前
【C++20新特性】概念约束特性与 “模板线程池”,概念约束是为了 “把握未知对象”
开发语言·c++·c++20·模板线程池
H Journey2 小时前
Linux su 命令核心用法总结
java·linux·服务器·su
老蒋每日coding2 小时前
LangGraph:从入门到Multi-Agent超级智能体系统进阶开发
开发语言·python
郁闷的网纹蟒2 小时前
虚幻5---第12部分---蒙太奇
开发语言·c++·ue5·游戏引擎·虚幻
小学仔2 小时前
科大镜像科大镜像科大镜像
java
小旭95272 小时前
Java 反射详解
java·开发语言·jvm·面试·intellij-idea
雨季6662 小时前
Flutter 三端应用实战:OpenHarmony “极简文本行数统计器”
开发语言·前端·flutter·ui·交互
HalvmånEver2 小时前
Linux:线程创建与终止上(线程五)
java·linux·jvm
m0_748233173 小时前
PHP版本演进:从7.x到8.x全解析
java·开发语言·php