The 30-Year Evolution of Java

Around 1990, ‘Sun Microsystems’ lost to ‘Microsoft’, in the race to capture the mainstream Intel-PC market. That’s (1991) when Bill Joy, chief researcher at Sun, retreated to Aspen, Colorado to work on research.

Bill Gosling, by then famous for creating a C - Unix version of the editor emacs, joined the team to work on software for information appliances like Personal Digital Assistants (PDAs) – a precursor to cellphones. These required real-time data transfers over cheap infra-red and packet-based networks – an environment marked by memory and bandwidth limitations and requiring inbuilt safety and robustness.

They started with C++, but it proved unwieldy and lacked security. The failure of the Apple Newton – a prescient PDA – led the team to switch focus to interactive television (ITV) and eventually to launch a new language called Oak in 1993.
ITV failed to catch on.
However, around the same time, the Web began to explode on the scene. (see [[ssg-jamstack#Web Development Evolution]]).
And Oak happened to have the very characteristics suited to the Web (it was a small, safe and architecture independent language).
Recognizing the opportunity to capture the Web space, the Sun team retooled and repackaged Oak as ‘Java’, and lo and behold, Java was born.

Java Evolution Timeline

Year Java Release / Event Key Features & Notes
1982 Sun Microsystems formed Focused on workstation market (specialised, powerful machines). Sun eventually lost market share to IBM PCs.
1996 Java JDK 1.0 Sun’s chosen terminology: Java Development Kit (JDK)
1997 Java 1.1
HTTP/1.1
 
1997 Sun sues Microsoft for subverting Java Microsoft introduced incompatibilities in their own version of the language by launching a Microsoft Java Virtual Machine that did not fully implement Java 1.1
1998 Java SDK 1.2
aka Java 2
Terminology change to Software Development Kit (SDK).
Also split between Java2 Standard Edition (J2SE) bundle for desktop & server apps, and,
Enterprise Edition (J2EE) for distributed, enterprise applications.
Swing API & Collections framework launched.
2000 Java 1.3 Added Java XML APIs
2001 Jan Microsoft settles Sun’s lawsuit for USD 20 million Microsoft settles lawsuit brought by Sun and agrees to phase out their JVM
2002 Java 1.4
Code name: Merlin
Added IPv6 support, non-blocking I/O, image processing API
2004 Java JDK 1.5
Code name: Tiger
aka Java 5
Terminology reverted to JDK.
Generics, Autoboxing (primitive to wrapper), Annotations (metadata aware utilities), enumerators, varargs, enhanced for loops, static imports, Scanner class.
2006 May *Java open-sourced at JavaOne Conference The parts of Java code owned by Sun are open-sourced under GPLv2+CE.
The OpenJDK initiative is kicked off.
2006 Dec Java 6
Code name: Mustang
JDBC 4.0, and performance improvements to core platform
2008 Dec JavaFX 1.0 SDK JavaFX launched as a scripting language.
Until now the only UI options were:
1. AWT: for peered, heavy-weight components rendered by a native peer in the host OS’ windowing toolkit. Eg. X-Window on Unix, and,
2. Swing: for lightweight (doesn’t require OS windowing toolkit).
2010 Jan Oracle acquires Sun for USD 5.6 billion Sun floundered due to focus on Sparc instead of x86 platform.
2011 Java 7
Code name: Dolphin

First release by Oracle, and the first under OSS license.
Introduced JVM support for dynamic languages with a new invokedynamic bytecode.

Project Coin (small change): String in switch, automatic resource management using try-with-resources, improved type inference using diamond (<>) syntax, integers as binary using binary integer literals (0b01001001 == 73).

New I/O (NIO.2) library,
JavaFX 2.0: moved from scripting language to a Java API.
2011 OpenJDK released Java development community launches open source, reference build of Java.
2014 Java 8 LTS (retrospectively)
Code name: Spider
Language syntax changes (Lambda expressions for functional programming), Optional API, default methods in interfaces, Streams API, new Date & Time API, gc improvements.
2015 HTTP/2 released  
2017 Sep Java 9 Project Jigsaw (Java Platform Modules), JShell (REPL), private methods in interfaces, factory methods for collections.
2018 Mar JDK 10
Java 18.3
(new versioning convention: $YEAR.$MONTH )
Local variable type inferencing using var, application Class-Data sharing of metadata across processes, heap allocation on alternative memory devices.
2018 Jun Change in release cadence model:
Bi-annual feature releases, and an LTS every 2 years.
From one major release every two to three years,
to a new six monthly feature-release cycle.
Feature releases have limited support and are not for production use.
Oracle iwll now designate one release every two years as a Long-Term-Support (LTS) release.
LTS releases are supported by Oracle for 8 years.
2018 Sep Java 11 LTS
aka Java 18.9
First LTS release.

HTTP/2 support with new HTTP client API, Epsilon (no-op) gc.
  Oracle announces change to Java distribution licensing: will charge for Java SE 8 licenses Oracle’s JDK is built from upstream OpenJDK project sources. But Oracle JDK binary is not licensed as OSS as it is proprietary software.
Oracle JDK builds are supported with free updates only for six months, requiring a license for support and updates. Otherwise consumers have to use a binary distribution licensed as OSS:
Eclipse Adoptium (previously AdoptOpenJDK): built using open source build scripts
OpenJDK: GNU GPL license allows modification to suit needs
2019 Mar Java 12
(feature release)
experimental Shenandoah (reduced pause) gc,
modified switch syntax allowing use as an expression, removes need for break,
JVM Constants API for tools that manipulate classes and methods,
Class Data Sharing (CDS) archives to improve build process.
2019 Sep Java 13
(feature release)
Improvement to CDS archive support, further imprymts to switch expressions, new implementation of legacy Socket API.
2020 Mar Java 14
(feature release)
> most features in preview mode / incubation phase
Pattern matching for instanceof operator, JFR Event Streaming API for collecting profiling & diagnostic data about a running Java application and JVM,
Records introduced as classes to hold immutable data, incubating Foreign Memory.
Access API to access memory outside Java heap,
improvements to NPE class to identify variable that is null, jpackage tool launched to support native packaging formats.
CMS (Concurrent Mark Sweep) gc removed.
2020 Sep Java 15
(short-term release)
Nashorn JavaScript Engine removed,
Text blocks for multi-line strings,
EdDSA (Edwards-Curve Digital Signature Algorithm) support for cryptographic signatures
2021 Mar Java 16
(short-term release)
Stabilizes Java 15 features that were in preview mode (like final Records release).

Vector API for optimizing vector computations on CPU architectures that support vector instruction sets, incubating Foreign Linker API to access native code, support for C++ 14 features
2021 Sep Java 17 (LTS) Focused on improving performance of JVM internals & deprecating old APIs,
Foreign Function & Memory API (merged two incubating APIs: Foreign Memory Access API & Foreign Linker API) allows native calls without risks of JNI.
2022 Mar Java 18
(short-term release)
Updates of preview and incubator features:
Vector API 3rd incubator,
Simple Web Server for static files,
@snippet tag for JavaDocs,
deprecation of finalization mechanism
2022 Sep Java 19
(short-term release)
Updates of preview and incubator features:
Vector API 4th incubator,
Virtual Threads 1st preview,
Structured Concurrency 1st incubator
2023 Mar Java 20
(short-term release)
Updates of preview and incubator features:
Vector API 5th incubator, Virtual Threads 2nd preview, Structured Concurrency 2nd incubator
2023 Sep Java 21 (LTS) Launched Virtual Threads,
Generational ZGC (separate generations and independent collection for young i.e. recently allocated & old i.e. long-lived objects),
Record Patterns, Pattern Matching for switch expressions,
Sequenced Collections (elements with a defined encounter order & uniform operations across such collections)
2024 Mar Java 22
(short-term release)
Updates of preview and incubator features:
Class-File API 1st preview (will allow use of dependencies compiled with older versions of Java, but same Class-File API)
2024 Sep Java 23
(short-term release)
Updates of preview and incubator features:
Markdown Documentation Comments, Module Import Declarations
2025 Mar Java 24
(short-term release)
Stream Gatherers enhancement to Stream API,
Class-File API,
Key Derivation Function API (Preview),
implementation of quantum-resistant Module-Lattice-Based Key Encapsulation Mechanism (ML-KEM) and Module-Lattice-Based Digital Signature Algorithm (ML-DSA) for post-quantum readiness
timeline
    title 30 Years of Java Evolution
    section The Early Era
        1982 : Sun Microsystems Formed
        1996 : Java 1.0 (JDK)
        1997 : Java 1.1 : HTTP/1.1 : Microsoft JVM Lawsuit
        1998 : Java 2 (SDK 1.2) : Swing & Collections
    section The Growth Era
        2004 : Java 5 (Tiger) : Generics : Autoboxing : Annotations
        2006 : Java 6 : OpenJDK Initiated
        2010 : Oracle Acquires Sun
        2011 : Java 7 : Project Coin : ForkJoin
    section Modern Cadence (LTS)
        2014 : Java 8 (LTS) : Lambdas : Streams API : Date/Time API
        2018 : Java 11 (LTS) : 6-Month Cadence Model : New Oracle Licensing
        2021 : Java 17 (LTS) : Sealed Classes : Foreign Function & Memory
        2023 : Java 21 (LTS) : Virtual Threads : Sequenced Collections
    section Post-Quantum Era
        2025 : Java 24 : Stream Gatherers : ML-KEM / ML-DSA (Post-Quantum Crypto)