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)