Java version history: Difference between revisions

Content deleted Content added
m Reference before punctuation
Java SE 25 (LTS): add JEPs and add to infobox, add release date
 
(18 intermediate revisions by 10 users not shown)
Line 2:
{{About|the Java programming language||History of Java (disambiguation){{!}}History of Java}}
 
The [[Java (programming language)|Java language]] has undergone several changes since [[Java Development Kit|JDK]]&nbsp;1.0 as well as numerous additions of [[class (computer science)|classes]] and packages to the standard [[library (computer science)|library]]. Since J2SE&nbsp;1.4, the evolution of the Java language has been governed by the [[Java Community Process]] (JCP), which uses ''Java Specification Requests'' (JSRs) to propose and specify additions and changes to the [[Java (software platform)|Java platform]]. The language is specified by the ''Java Language Specification'' (JLS); changes to the JLS are managed under [http://www.jcp.org/en/jsr/detail?id=901 JSR&nbsp;901]. In September 2017, Mark Reinhold, chief Architectarchitect of the Java Platform, proposed to change the release train to "one feature release every six months" rather than the then-current two-year schedule.<ref name="6monthsReinhold">{{cite web| title=Moving Java Forward Faster | last=Reinhold | first=Mark | url=https://mreinhold.org/blog/forward-faster | date=2017-09-06 | access-date=2017-09-16}}</ref><ref name="6monthsServerSide">{{cite web| title=Calling 'all aboard' on the six-month Java release train |publisher=theserverside.com | url=http://www.theserverside.com/news/450426185/Calling-all-aboard-on-the-six-month-Java-release-train | date=2017-09-12 | access-date=2017-09-16}}</ref> This proposal took effect for all following versions, and is still the current release schedule.
 
In addition to the language changes, other changes have been made to the [[Java Class Library]] over the years, which has grown from a few hundred classes in JDK&nbsp;1.0 to over three thousand in J2SE&nbsp;5. Entire new [[API]]s, such as [[Swing (Java)|Swing]] and [[Java2D]], have been introduced, and many of the original JDK&nbsp;1.0 classes and methods have been [[deprecation|deprecated]], and very few APIs have been removed (at least one, for threading, in Java 22<ref name="removed_API_in Java_22"/>). Some programs allow the conversion of Java programs from one version of the [[Java (software platform)|Java platform]] to an older one (for example Java&nbsp;5.0 backported to 1.4) (see [[Java backporting tools]]).
 
Regarding Oracle's [[Java Platform, Standard Edition|Java SE]] support roadmap,<ref name=oracle/> Java SE 2324 iswas the latest version in June 2025, while versions 21, 17, 11 and 8 arewere the currently supported [[long-term support]] (LTS) versions, where Oracle Customers will receive Oracle Premier Support. Oracle continues to release no-cost public Java 8 updates for development<ref name=oracle/> and personal use indefinitely. Oracle also continues to release no-cost public Java 17&nbsp;LTS updates for all users, including commercial and production use until September 2024.<ref name="nftc">{{Cite web|url=https://blogs.oracle.com/cloud-infrastructure/post/introducing-free-java-license|title=Introducing the Free Java License
|last=Smith| first=Donald|date=}}</ref>
 
In the case of [[OpenJDK]], both commercial long-term support and [[free software]] updates are available from multiple organizations in the broader [[OpenJDK#OpenJDK builds|community]].<ref name="OracleJava11LTS">{{cite web| title=What does LTS mean for OpenJDK? | last=Reinhold | first=Mark | url=https://mail.openjdk.java.net/pipermail/jdk-dev/2018-August/001824.html | date=2018-08-17 | access-date=2018-08-28}}</ref>
 
Java 23 was released on 17 September 2024. Java 24 was released on 18 March 2025.<ref>{{cite web | url=https://jdk.java.net/24/ | title=OpenJDK JDK 24.0.1 GA Release }}</ref>
 
== Release table ==
Line 23:
The first version was released on January 23, 1996.<ref name="pr10">{{cite press release|url=http://www.sun.com/smi/Press/sunflash/1996-01/sunflash.960123.10561.xml |title=JavaSoft ships Java 1.0 |access-date=2008-02-05 |url-status=dead |archive-url=https://web.archive.org/web/20070310235103/http://www.sun.com/smi/Press/sunflash/1996-01/sunflash.960123.10561.xml |archive-date=March 10, 2007}}</ref><ref name=JavaHistory>{{cite book |last1=Ortiz |first1=C. Enrique |last2=Giguère |first2=Éric |title=Mobile Information Device Profile for Java 2 Micro Edition: Developer's Guide |year=2001 |publisher=[[John Wiley & Sons]] |isbn=978-0-471-03465-0 |url=https://archive.org/details/mobileinformatio0000orti |access-date=May 30, 2012 |url-access=registration }}</ref> The first stable version, JDK 1.0.2, is called Java&nbsp;1.<ref name=JavaHistory/>
{{-}}
 
It included:
 
* core language features (basic java types in java.lang, and utility classes in java.util)
* support for graphics ([[Abstract_Window_Toolkit|AWT]] framework)
* support for creating a [[Java applet]]
* libraries for [[Input/output|I/O]] and [[Computer_network|networking]]
 
== JDK 1.1 ==
Line 33 ⟶ 40:
* [[inner class]]es added to the language
* [[JavaBeans]]
* [[Java Database Connectivity]] (JDBC) and support for [[sql]]
* [[Java remote method invocation]] (RMI) and [[serialization]]
* [[Reflective programming|reflection]] which supported Introspection only, no modification at runtime was possible. (The ability to modify objects reflectively was added in J2SE 1.2, by introducing the {{Javadoc|module=java.base|package=java.lang.reflect|class=AccessibleObject|text=AccessibleObject}} class and its subclasses such as the {{Javadoc|module=java.base|package=java.lang.reflect|class=Field|text=Field}} class.)
Line 136 ⟶ 143:
=== Versioning change ===
This version introduced a new versioning system for the Java language, although the old versioning system continued to be used for developer libraries:
{{QuoteBlockquote|text=Both version numbers "1.5.0" and "5.0" are used to identify this release of the Java 2 Platform Standard Edition. Version "5.0" is the product version, while "1.5.0" is the developer version. The number "5.0" is used to better reflect the level of maturity, stability, scalability and security of the J2SE.|source="Version 1.5.0 or 5.0?", Java release notes<ref>{{cite web |title=Version 1.5.0 or 5.0? |url=https://docs.oracle.com/javase/1.5.0/docs/relnotes/version-5.0.html |publisher=Oracle.com |access-date=April 18, 2016}}</ref>}}
 
This correspondence continued through later releases (Java 6 = JDK 1.6, Java 7 = JDK 1.7, and so on).
Line 226 ⟶ 233:
|-
| Java SE 6 Update 14{{citation needed|date=June 2023}}|| 2009-05-28
|| HotSpot VM 14. This release includes extensive performance updates to the JIT compiler, compressed pointers for 64-bit machines, as well as ''experimental'' support for the [[Garbage-first collector|Garbage-First (G1)]] (Garbage First)a low-pause garbage[[Garbage collectorcollection (computer science)|Garbage Collector]].<ref>{{cite web|url=https://www.infoq.com/news/2008/05/g1|title=JavaOne: Garbage First|publisher=infoq.com|last=Humble|first= Charles|date=2008-05-13|access-date = 2008-09-07}}</ref><ref>{{cite web|url=https://blogs.oracle.com/theplanetarium/entry/java_vm_trying_a_new|title=Java VM: Trying a new Garbage Collector for JDK 7|last=Coward|first=Dany|date=2008-11-12|access-date=2012-01-22|url-status=dead|archive-url=https://web.archive.org/web/20111208114910/http://blogs.oracle.com/theplanetarium/entry/java_vm_trying_a_new|archive-date=2011-12-08}}</ref>
 
The <code>-XX:+DoEscapeAnalysis</code> option directs the HotSpot [[JIT compiler]] to use [[escape analysis]] to determine whether local objects can be allocated on the [[Stack-based memory allocation|stack]] instead of the [[Dynamic memory allocation|heap]].{{citation needed|date=June 2023}}
Line 387 ⟶ 394:
| Java SE 7 Update 3{{citation needed|date=June 2023}}|| style="white-space:nowrap" |2012-02-14 || 14 security fixes<ref>{{Cite web|url=https://www.oracle.com/security-alerts/javacpufeb2012.html|title=Oracle Java SE Critical Patch Update Advisory – February 2012|website=oracle.com}}</ref>
|-
| Java SE 7 Update 4{{citation needed|date=June 2023}}|| 2012-04-26 || No security updates; HotSpot VM 23; JDK Support for Mac OS X; New Supported [[Garbage collection (computer science)|Garbage Collector]]: [[Garbage-first collector|Garbage-First (G1)]]
|-
| Java SE 7 Update 5{{citation needed|date=June 2023}}|| 2012-06-12 || 14 security fixes<ref>{{Cite web|url=https://www.oracle.com/security-alerts/javacpujun2012.html|title=Oracle Java SE Critical Patch Update Advisory – June 2012|website=oracle.com}}</ref>
Line 571 ⟶ 578:
{{Anchor|Java 8}}
 
== Java SE 8 (LTS) ==
{{Infobox Java version
|version name = Java SE 8
|codename = Spider
|lts = yes
|released = {{Start date and age|2014|3|18|df=y|br=yes|paren=yes}}
|jeps = 8
}}
Java 8 was released on March 18, March 2014,<ref name="Java 8">{{cite web |url=https://mail.openjdk.java.net/pipermail/jdk8-dev/2013-April/002336.html |title=Proposed new schedule for Java 8 |date=2013-04-18 |access-date=2013-04-19}}</ref><ref>{{cite web |url=https://openjdk.java.net/projects/jdk8/ |title=JDK 8 |publisher=OpenJDK |date=2013-04-18 |access-date=2014-01-28}}</ref> and included some features that were planned for Java 7 but later deferred.<ref>{{cite web |url=https://openjdk.java.net/projects/jdk8/features |title=JDK 8 features |publisher=OpenJDK |date=2014-01-28 |access-date=2014-01-28}}</ref>
 
Work on features was organized in terms of [[JDK Enhancement Proposal]]s (JEPs).<ref>{{cite web |url=https://jcp.org/en/jsr/detail?id=337 |title=JSR 337|access-date=2014-01-30}}</ref>
Line 868 ⟶ 876:
|Java SE 8 Update 441<ref>{{Cite web |title=Java SE Development Kit 8, Update 441 Release Notes |url=https://www.oracle.com/java/technologies/javase/8u441-relnotes.html |website=oracle.com}}</ref>
|2025-01-21
|
|-
|Java SE 8 Update 451<ref>{{Cite web |title=Java SE Development Kit 8, Update 451 Release Notes |url=https://www.oracle.com/java/technologies/javase/8u451-relnotes.html |website=oracle.com}}</ref>
|2025-04-15
|
|-
|Java SE 8 Update 461<ref>{{Cite web |title=Java SE Development Kit 8, Update 461 Release Notes |url=https://www.oracle.com/java/technologies/javase/8u461-relnotes.html |website=oracle.com}}</ref>
|2025-07-15
|
|-
Line 1,014 ⟶ 1,030:
{{Anchor|Java 11}}
 
== Java SE 11 (LTS) ==
{{Infobox Java version
| version name = Java SE 11
Line 1,732 ⟶ 1,748:
* {{Java JEP|376|ZGC: Concurrent Thread-Stack Processing}}
* {{Java JEP|380|Unix-Domain Socket Channels}}
* {{Java JEP|386|Alpine Linux Port}}{{snd}}&nbsp;— not yet stable
* {{Java JEP|387|Elastic Metaspace}}
* {{Java JEP|388|Windows/AArch64 Port}}
Line 1,782 ⟶ 1,798:
{{Anchor|Java 17}}
 
== Java SE 17 (LTS) ==
{{Infobox Java version
| version name = Java SE 17
Line 1,991 ⟶ 2,007:
'''''Bug fixes'''''
* 46 bug fixes<ref>{{Cite web|date=2024-01-16|title=JDK 17.0.10 Bug Fixes|url=https://www.oracle.com/java/technologies/javase/17-0-10-relnotes.html#bugfixes-R17_0_10|website=oracle.com}}</ref>
 
|-
| Java SE 17.0.11<ref>{{cite web|url=https://www.oracle.com/java/technologies/javase/17-0-11-relnotes.html|title=JDK 17.0.11 Release Notes|publisher=oracle.com|date=2024-04-16}}</ref>
| 2024-04-16
|
|-
| Java SE 17.0.12<ref>{{cite web|url=https://www.oracle.com/java/technologies/javase/17-0-12-relnotes.html|title=JDK 17.0.12 Release Notes|publisher=oracle.com|date=2024-07-16}}</ref>
| 2024-07-16
|
|-
| Java SE 17.0.13<ref>{{cite web|url=https://www.oracle.com/java/technologies/javase/17-0-13-relnotes.html|title=JDK 17.0.13 Release Notes|publisher=oracle.com|date=2024-10-15}}</ref>
| 2024-10-15
|
|-
| Java SE 17.0.14<ref>{{cite web|url=https://www.oracle.com/java/technologies/javase/17-0-14-relnotes.html|title=JDK 17.0.14 Release Notes|publisher=oracle.com|date=2025-01-21}}</ref>
| 2025-01-21
|
|-
| Java SE 17.0.15<ref>{{cite web|url=https://www.oracle.com/java/technologies/javase/17-0-15-relnotes.html|title=JDK 17.0.15 Release Notes|publisher=oracle.com|date=2025-04-15}}</ref>
| 2025-04-15
|
|}
 
Line 2,191 ⟶ 2,228:
{{Anchor|Java 21}}
 
== Java SE 21 (LTS) ==
{{Infobox Java version
| version name = Java SE 21
Line 2,287 ⟶ 2,324:
'''''Bug fixes'''''
* 27 bug fixes<ref>{{Cite web|date=2024-04-16|title=JDK 21.0.3 Bug Fixes|url=https://www.oracle.com/java/technologies/javase/21-0-3-relnotes.html#bugfixes-R21_0_3|website=oracle.com}}</ref>
|-
|Java SE 21.0.4<ref>{{Cite web|date=2024-07-16|title=JDK 21.0.4 Release Notes|url=https://www.oracle.com/java/technologies/javase/21-0-4-relnotes.html|website=oracle.com}}</ref>
|2024-07-16
|
|-
|Java SE 21.0.5<ref>{{Cite web|date=2024-10-15|title=JDK 21.0.5 Release Notes|url=https://www.oracle.com/java/technologies/javase/21-0-5-relnotes.html|website=oracle.com}}</ref>
|2024-10-15
|
|-
|Java SE 21.0.6<ref>{{Cite web|date=2025-01-21|title=JDK 21.0.6 Release Notes|url=https://www.oracle.com/java/technologies/javase/21-0-6-relnotes.html|website=oracle.com}}</ref>
|2025-01-21
|
|-
|Java SE 21.0.7<ref>{{Cite web|date=2025-04-15|title=JDK 21.0.7 Release Notes|url=https://www.oracle.com/java/technologies/javase/21-0-7-relnotes.html|website=oracle.com}}</ref>
|2025-04-15
|
|}
 
Line 2,395 ⟶ 2,448:
{{Anchor|Java 25}}
 
== Java SE 25 (LTS) ==
{{Infobox Java version
| version name = Java SE 25
| lts = yes
| released = {{Start date and age|2025|9|16|df=y|br=yes|paren=yes}}
| jeps = 018
| features = {{Ubl|
* Module Import Declarations
* Flexible Constructor Bodies
}}
| removed = {{Ubl|
* 32-bit x86 Port
}}
| previews = {{Ubl |
* Primitive Types in Patterns, instanceof, and switch
* PEM Encodings of Cryptographic Objects
}}
| unreleased = yes
}}
 
{{As of|2024|December}}, theThe specification for Java 25 haswas notfinalized yetin beenJuly finalized.2025, Javawith 2518 isJEPs scheduledmaking forit releaseinto inthe September 2025release.<ref>{{Cite web |title=Java SE 25 Platform JSR 400 |url=https://openjdk.org/projects/jdk/25/spec/ |access-date=2024-12-15 |website=openjdk.org}}</ref> Java 25 is scheduled for release on September 16, 2025.<ref>{{Cite web |title=JDK 25 |url=https://openjdk.org/projects/jdk/25/ |access-date=2025-07-21 |website=openjdk.org}}</ref>
 
# {{Java JEP|470|PEM Encodings of Cryptographic Objects (Preview)}}
# {{Java JEP|502|Stable Values (Preview)}}
# {{Java JEP|503|Remove the 32-bit x86 Port}}
# {{Java JEP|505|Structured Concurrency (Fifth Preview)}}
# {{Java JEP|506|Scoped Values}}
# {{Java JEP|507|Primitive Types in Patterns, instanceof, and switch (Third Preview)}}
# {{Java JEP|508|Vector API (Tenth Incubator)}}
# {{Java JEP|509|JFR CPU-Time Profiling (Experimental)}}
# {{Java JEP|510|Key Derivation Function API}}
# {{Java JEP|511|Module Import Declarations}}
# {{Java JEP|512|Compact Source Files and Instance Main Methods}}
# {{Java JEP|513|Flexible Constructor Bodies}}
# {{Java JEP|514|Ahead-of-Time Command-Line Ergonomics}}
# {{Java JEP|515|Ahead-of-Time Method Profiling}}
# {{Java JEP|518|JFR Cooperative Sampling}}
# {{Java JEP|519|Compact Object Headers}}
# {{Java JEP|520|JFR Method Timing & Tracing}}
# {{Java JEP|521|Generational Shenandoah}}
 
{{Clear}}
Line 2,432 ⟶ 2,515:
Both [[Jikes]] and [[Jikes RVM]] are open-source research projects that IBM developed.
 
Several other implementations exist that started as proprietary software, but are now open source. IBM initially developed [[OpenJ9]] as the proprietary J9,<ref>{{Cite web|url=https://developer.ibm.com/javasdk/downloads/|title=Downloads – Overview|date=July 18, 2016}}</ref> but has since relicensed the project and donated it to the [[Eclipse Foundation]]. [[JRockit]] is a proprietary implementation that was acquired by Oracle and incorporated into subsequent OpenJDK versions.
 
== References ==
{{reflist|refs=
<ref name=azulibmjdk>{{Cite web|url=https://www.azulibm.com/productssupport/azulpages/java-supportsdk-roadmaplifecycle-dates|title =IBM AzulJava JDKSDK roadmaplifecycle}}</ref>
<ref name=semeru>{{Cite web|url=https://www.ibm.com/support/pages/semeru-runtimes-support|title=IBM Semeru Runtimes lifecycle}}</ref>
<ref name=azul>{{Cite web|url=https://www.azul.com/products/azul-support-roadmap|title=Azul JDK roadmap}}</ref>
<ref name=corretto>{{Cite web|url=https://aws.amazon.com/corretto/faqs|title = Amazon Corretto support calendar}}</ref>
<ref name=redhat>{{Cite web|url=https://access.redhat.com/articles/1299013|title = Red Hat OpenJDK Life Cycle and Support Policy| date=19 November 2023 }}</ref>