Back
Featured image of post JVM 学习笔记 01 - Java 往世书

JVM 学习笔记 01 - Java 往世书

Java 可能已经过时,但 JVM 仍然在发挥它强大的功用。并为所有 JVM 语言提供强劲的支持。本文为作者学习 JVM 的笔记。

导航页

前言

世界上没有完美的编程语言,只有最适合的编程语言。

正如 Elizarov 在文章中所说的。Java 带来的贡献远多于它的糟粕。并为开发者提供了在多平台上一致的体验,而无需担心编译错误。有的语言试图复制 Java 的成功,比如微软 C#,继承了 Java 的所有优势。然而,它最初将用户锁定在 Microsoft 平台上,却没有认识到跨平台性的重要性。

现如今 Kotlin 站在巨人的肩膀上,提供了更流畅的开发体验。有关于此,请查看本博客的 Tag

所以,底层的 JVM 仍然是不可忽视的一部分。

技术体系

广泛而言,Kotlin、Clojure、JRuby、Jython、Groovy、Scala(当然也包括 Java)等一大票编程语言都主要运行于 JVM 上,都属于 Java 生态的一部分。

狭义的说,Java 主要就是由:

  • JDK(Java Development Kit),Java 开发工具,用于开发、编译、调试 Java 程序。
  • JRE(Java Runtime Environment),Java 运行时环境,用于运行 Java 程序。
  • JVM(Java Virtual Machine),Java 虚拟机,是 Java 对 native 系统的抽象,便于程序在多平台上运行。

所组成的。它们的包含关系可以见下图:

JDK JRE JVM 关系图

JVM 是 Java 的核心,实现了一次编译处处运行的目标。通过采用一致的标准,为开发者屏蔽了繁琐的底层实现。任何系统只要有对应的 JVM 实现,就无需重新编译,直接运行。

JDK JRE JVM 关系图

发展历程

本文不是讲 Java 语言特性的,有关 Java 语法的发展内容,可以参阅这个网站

  • 1995年:Java 1.0 Release
  • 1997年:JDK 1.1 Release
  • 1999年:HotSpot VM 发布,成为 JDK 1.3 及以后的默认 JVM
  • 2000年:JDK 1.3 Release,Sun 预定维持大概 2 年发一个主版本的节奏
  • 2002年:JDK 1.4 Release
  • 2004年:JDK 5 Release,Java 从此将版本号修改为「JDK XX」而非 1.X。同时,泛型注解等重要语法特性被加入。
  • 2006年:JDK 6 Release,Sun 公司宣布将 Java 以 GPLv2 开源。OpenJDK 出现
    • JDK 6 维持了数十年之久,最后一个版本 JDK 7 Update 211 于 2018 年发布
  • 2009年,JDK 7 Milestone 1 Release,Sun 被 Oracle 收购
  • 2014年:JDK 8 Release,Lambda 等特性加入。
  • 2017年:JDK 9 Release
    • Oracle 决定从 JDK 9 开始刷版本,每年 3 月和 9 月各发一个大版本,同时每 6 个大版本选择一个 LTS(Long Term Support,长期支持)版本。
    • 于是乎 2022 年的 LTS 版主要有 3 个:8、11、17
  • 2018年:开发者之间闹得沸沸扬扬的:Wikipedia - 甲骨文诉谷歌Java侵权案(Google LLC v. Oracle America, Inc.
    • 该案最终在 2021 年由美国最高法重新审理判决 Google 属于合理使用。
  • 2018年9月:JDK 11 Release,ZGC 出现。
    • 同时,Oracle 修改了 JDK 的许可证。OpenJDK 以 GPLv2 + Classpath Exception 授权。Oracle 对 OpenJDK 的维护时长仅有 6 个月。历史分支转由 Red Hat 主要维护。更多信息可以参见:Wikipedia - OpenJDK
  • 2021年:JDK 17 Release,Oracle 宣布 JDK 17 可以免费商用持续 3 年。具体的讨论可以看这里:知乎 - Oracle JDK17及以后的版本真的都免费么?同时,从 JDK 17 开始是每 4 个版本一个 LTS,所以下一个 LTS 是 JDK 21。

本文就到这里了。只先介绍一下 Java 的历史和基本组成,后续更新有关 JVM 细节的文章。

comments powered by Disqus