Java History and Platform

Last update: 2021-03-28 10:12:46 +0800 +0800
tags: Java | Jdk
Available translations: 日本語 / 中文(简体) / 中文(繁體)

Sun Microsystems released Java 1.0 in 1996. Major compatibility milestones include J2SE 1.2 (1998), Java 5 (2004, generics and annotations), Java 8 (2014, lambdas), and Java 9 (2017, modules). Oracle acquired Sun in 2010. OpenJDK is the open-source reference implementation of Java SE, with HotSpot as its principal JVM implementation; Oracle JDK and many vendor distributions are builds of OpenJDK with differing support and packaging policies. Since Java 10, feature releases follow a six-month cadence, while chosen releases receive longer vendor support.

Specifications and Governance #

The Java Community Process (JCP) standardizes Java SE through Java Specification Requests (JSRs). A JSR has a specification lead and Expert Group; the Executive Committee approves defined milestones and the Program Management Office administers the process. The JCP is distinct from OpenJDK development.

OpenJDK’s JDK Enhancement Proposal (JEP) process records and steers significant JDK work. A JEP is not automatically a Java SE standard. When an OpenJDK change modifies standardized APIs, the related JSR process supplies the specification work. JEP 1 defines that relationship.

Platform Boundaries #

The Java language is specified by the JLS. The JVM instruction set, class-file format, and execution model are specified by the JVMS. Java SE API specifications define library contracts. A JDK is a distribution containing a JVM, standard libraries, and development tools such as javac, jar, jlink, and javadoc; it is an implementation and toolchain, not a synonym for the language or the JVM.

Deployment Details #

The launcher expands a class-path element ending in * to JAR files in that directory. The wildcard is non-recursive, matches archives rather than arbitrary class directories, and has platform-dependent ordering; explicit paths are required when ordering matters.

A multi-release JAR has Multi-Release: true in its manifest and can place version-specific class files under META-INF/versions/N/. A runtime selects the highest applicable version no greater than its feature version, otherwise the root entry. Tooling must preserve the manifest and validate each versioned entry, because an MR-JAR is one artifact with multiple runtime views.

In Java terminology, a field is a variable declared in a class or interface. “Data member” is informal and can ambiguously include fields, properties, and other state. Use “field” for the language construct and name a dependency or encapsulated state explicitly when discussing design.

References #

Comments

Read or comment on GitHub (sign-in required to comment)