为什么 Java class 文件版本从 45 开始?

Why do Java class file versions start from 45?

根据 JVM 规范:

Oracle's Java Virtual Machine implementation in JDK release 1.0.2 supports class file format versions 45.0 through 45.3 inclusive. JDK releases 1.1.* support class file format versions in the range 45.0 through 45.65535 inclusive. For k ≥ 2, JDK release 1.k supports class file format versions in the range 45.0 through 44+k.0 inclusive.

https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html

我想知道,为什么他们从 45 开始版本控制,而不是从 10?

Why do Java class file versions start from 45?

在第一个 public 发布版本 (Java 1.0.2) 之前有 Java 版本。

Java 最初于 1991 年作为 Oak 编程语言诞生。1994 年更名为 Java,第一个 public 版本于 1996 年发布。

可以安全地假设 class 小于 45 的文件版本用于早期(预发布)版本的 Java 并且可能是 Oak。在早期,开发人员很可能对字节码指令集和 class 文件格式的其他方面进行了大量更改。这将需要定期“修改”class文件版本号。

以上主要是推测。关于 Oak 和 pre-1.0 Java 的可用信息非常少 public。然而,1993 年 Oak specification 的文本表明他们 已经 将 Oak 源代码编译为存储在“.class”文件中的字节码,每个class.