Java version history: Difference between revisions

Content deleted Content added
Update
Java SE 25 (LTS): add JEPs and add to infobox, add release date
 
(6 intermediate revisions by 4 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]]).
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 579 ⟶ 586:
|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 873 ⟶ 880:
|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,737 ⟶ 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 2,441 ⟶ 2,452:
| 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,474 ⟶ 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 ==