Jump to content

Java (software platform): Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Deprecations and at least one API removal
Cadac0 (talk | contribs)
m Removed link to unrelated article
 
(28 intermediate revisions by 17 users not shown)
Line 4: Line 4:


{{Use mdy dates|date=December 2020}}
{{Use mdy dates|date=December 2020}}

{{Infobox software
{{Infobox software
| name = Java (software platform)
| name = Java (software platform)
| logo = Dukesource125.gif<!-- Image name is enough -->
| logo = Dukesource125.gif<!-- Image name is enough -->
| logo caption = The Java technology logo
| logo caption = The Java technology logo
| logo size = 100px
| logo size = 100px
| author = [[James Gosling]], [[Sun Microsystems]]
| author = [[James Gosling]], [[Sun Microsystems]]
| developer = [[Oracle Corporation]]
| developer = [[Oracle Corporation]]
| released = {{Start date and age|1996|01|23}}<ref name="pr10">{{cite press release
| released = {{Start date and age|1996|01|23}}<ref name="pr10">{{cite press release
|url=https://www.sun.com/smi/Press/sunflash/1996-01/sunflash.960123.10561.xml |archive-url=https://web.archive.org/web/20080205101616/http://www.sun.com/smi/Press/sunflash/1996-01/sunflash.960123.10561.xml |archive-date=2008-02-05 |title=JavaSoft ships Java 1.0 |access-date=2016-02-09}}</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-0471034650 |url=https://archive.org/details/mobileinformatio0000orti |access-date=2012-05-30 |format=PDF |url-access=registration }}</ref>
|url = https://www.sun.com/smi/Press/sunflash/1996-01/sunflash.960123.10561.xml |archive-url=https://web.archive.org/web/20080205101616/http://www.sun.com/smi/Press/sunflash/1996-01/sunflash.960123.10561.xml |archive-date=2008-02-05 |title=JavaSoft ships Java 1.0 |access-date=2016-02-09
}}</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-0471034650 |url=https://archive.org/details/mobileinformatio0000orti |access-date=2012-05-30 |format=PDF |url-access=registration }}</ref>
| programming language = [[Java (programming language)|Java]], [[C++]], [[C (programming language)|C]], [[assembly language]]<ref>{{cite web|url=https://openjdk.java.net/groups/hotspot/ |title=HotSpot Group |publisher=Openjdk.java.net |access-date=2016-02-09}}</ref>
| programming language = [[Java (programming language)|Java]], [[C++]], [[C (programming language)|C]], [[assembly language]]<ref>{{cite web|url=https://openjdk.java.net/groups/hotspot/ |title=HotSpot Group |publisher=Openjdk.java.net |access-date=2016-02-09}}</ref>
| operating system = [[Microsoft Windows]], [[Linux]], [[macOS]],<ref name="system-configurations">{{cite web|url=https://www.oracle.com/technetwork/java/javase/certconfig-2095354.html |title=Oracle JDK 8 and JRE 8 Certified System Configurations Contents |website=Oracle.com |date=2014-04-08 |access-date=2016-02-09}}</ref> and for old versions: [[Solaris (operating system)|Solaris]]
| operating system = [[Microsoft Windows]], [[Linux]], [[macOS]],<ref name="system-configurations">{{cite web|url=https://www.oracle.com/technetwork/java/javase/certconfig-2095354.html |title=Oracle JDK 8 and JRE 8 Certified System Configurations Contents |website=Oracle.com |date=2014-04-08 |access-date=2016-02-09}}</ref> and for old versions: [[Solaris (operating system)|Solaris]]
| platform = [[x64]], [[ARMv8]], and for old versions: [[ARMv7]], [[IA-32]], [[SPARC]] (up to Java 14) <small>(Java&nbsp;8 includes [[32-bit computing|32-bit]] support for [[Microsoft Windows|Windows]]{{snd}} while no longer supported freely by Oracle for commercial use)</small><ref name="system-configurations" />
| platform = [[x64]], [[ARMv8]], and for old versions: [[ARMv7]], [[IA-32]], [[SPARC]] (up to Java 14) <small>(Java&nbsp;8 includes [[32-bit computing|32-bit]] support for [[Microsoft Windows|Windows]]{{snd}} while no longer supported freely by Oracle for commercial use)</small><ref name="system-configurations" />
| language = English, Chinese, French, German, Italian, Japanese, Korean, Portuguese, Spanish, Swedish<ref>{{cite web|url=https://www.oracle.com/technetwork/java/javase/javase7locales-334809.html#translation |title=Java SE 7 Supported Locales |publisher=Oracle.com |access-date=2016-02-09}}</ref>
| language = English, Chinese, French, German, Italian, Japanese, Korean, Portuguese, Spanish, Swedish<ref>{{cite web|url=https://www.oracle.com/technetwork/java/javase/javase7locales-334809.html#translation |title=Java SE 7 Supported Locales |publisher=Oracle.com |access-date=2016-02-09}}</ref>
| genre = [[Software platform]]
| genre = [[Software platform]]
| license = Dual-license: [[GNU General Public License]] version 2 with classpath exception,<ref>{{cite web|url=https://openjdk.java.net/legal/gplv2+ce.html |title=OpenJDK: GPLv2 + Classpath Exception |publisher=Openjdk.java.net |date=1989-04-01 |access-date=2016-02-09}}</ref> and a [[proprietary software|proprietary]] license.<ref>{{cite web|url=https://www.oracle.com/technetwork/java/javase/terms/license/index.html |title=BCL For Java SE |publisher=Oracle.com |date=2013-04-02 |access-date=2016-02-09}}</ref>
| license = Dual-license: [[GNU General Public License]] version 2 with classpath exception,<ref>{{cite web|url=https://openjdk.java.net/legal/gplv2+ce.html |title=OpenJDK: GPLv2 + Classpath Exception |publisher=Openjdk.java.net |date=1989-04-01 |access-date=2016-02-09}}</ref> and a [[proprietary software|proprietary]] license.<ref>{{cite web|url=https://www.oracle.com/technetwork/java/javase/terms/license/index.html |title=BCL For Java SE |publisher=Oracle.com |date=2013-04-02 |access-date=2016-02-09}}</ref>
| website = {{ubl|{{URL|oracle.com/java/}}|{{URL|java.com}}|{{URL|dev.java}}}}
| website = {{ubl|{{URL|oracle.com/java/}}|{{URL|java.com}}|{{URL|dev.java}}}}
}}
}}


Line 27: Line 27:
'''Java''' is a set of [[computer software]] and specifications that provides a [[software platform]] for developing [[application software]] and deploying it in a [[cross-platform]] computing environment. Java is used in a wide variety of [[computing platform]]s from [[embedded device]]s and [[mobile phone]]s to [[enterprise server]]s and [[supercomputer]]s. [[Java applet]]s, which are less common than standalone Java applications, were commonly run in secure, [[Sandbox (computer security)|sandboxed]] environments to provide many features of native applications through being embedded in [[HTML]] pages.
'''Java''' is a set of [[computer software]] and specifications that provides a [[software platform]] for developing [[application software]] and deploying it in a [[cross-platform]] computing environment. Java is used in a wide variety of [[computing platform]]s from [[embedded device]]s and [[mobile phone]]s to [[enterprise server]]s and [[supercomputer]]s. [[Java applet]]s, which are less common than standalone Java applications, were commonly run in secure, [[Sandbox (computer security)|sandboxed]] environments to provide many features of native applications through being embedded in [[HTML]] pages.


Writing in the [[Java (programming language)|Java programming language]] is the primary way to produce code that will be deployed as [[Java byte code|byte code]] in a [[Java virtual machine]] (JVM); byte code [[compiler]]s are also available for other languages, including [[Ada (programming language)|Ada]], [[JavaScript]], [[Python (programming language)|Python]], and [[Ruby (programming language)|Ruby]]. In addition, several languages have been designed to run natively on the JVM, including [[Clojure]], [[Groovy (programming language)|Groovy]], and [[Scala (programming language)|Scala]]. [[Java syntax]] borrows heavily from [[C (programming language)|C]] and [[C++]], but object-oriented features are modeled after [[Smalltalk]] and [[Objective-C]].<ref>{{cite web |url=http://virtualschool.edu/objectivec/influenceOnJava.html |title=Java Was Strongly Influenced by Objective-C |first=Patrick |last=Naughton |work=Virtual School |url-status=dead |archive-url=https://web.archive.org/web/20120813020537/http://virtualschool.edu/objectivec/influenceOnJava.html |archive-date=2012-08-13 }}</ref> Java eschews certain [[Low-level programming language|low-level]] constructs such as [[pointer (computer programming)|pointer]]s and has a very simple [[Memory model (programming)|memory model]] where objects are [[dynamic memory allocation|allocated on the heap]] (while some implementations <!-- e.g. IBM's J9 (now open sourced) and --> e.g. all currently supported by Oracle, may use [[escape analysis]] optimization to allocate on the [[stack-based memory allocation|stack]] instead) and all variables of object types are [[reference (computer science)|references]]. [[Memory management]] is handled through integrated automatic [[garbage collection (computer science)|garbage collection]] performed by the JVM.
Writing in the [[Java (programming language)|Java programming language]] is the primary way to produce code that will be deployed as [[Java byte code|byte code]] in a [[Java virtual machine]] (JVM); byte code [[compiler]]s are also available for other languages, including [[Ada (programming language)|Ada]], [[JavaScript]], [[Kotlin (programming language)|Kotlin]] (Google's preferred Android language), [[Python (programming language)|Python]], and [[Ruby (programming language)|Ruby]]. In addition, several languages have been designed to run natively on the JVM, including [[Clojure]], [[Groovy (programming language)|Groovy]], and [[Scala (programming language)|Scala]]. [[Java syntax]] borrows heavily from [[C (programming language)|C]] and [[C++]], but object-oriented features are modeled after [[Smalltalk]] and [[Objective-C]].<ref>{{cite web |url=http://virtualschool.edu/objectivec/influenceOnJava.html |title=Java Was Strongly Influenced by Objective-C |first=Patrick |last=Naughton |work=Virtual School |url-status=dead |archive-url=https://web.archive.org/web/20120813020537/http://virtualschool.edu/objectivec/influenceOnJava.html |archive-date=2012-08-13 }}</ref> Java eschews certain [[Low-level programming language|low-level]] constructs such as [[pointer (computer programming)|pointer]]s and has a very simple [[Memory model (programming)|memory model]] where objects are [[dynamic memory allocation|allocated on the heap]] (while some implementations <!-- e.g. IBM's J9 (now open sourced) and --> e.g. all currently supported by Oracle, may use [[escape analysis]] optimization to allocate on the [[stack-based memory allocation|stack]] instead) and all variables of object types are [[reference (computer science)|references]]. [[Memory management]] is handled through integrated automatic [[garbage collection (computer science)|garbage collection]] performed by the JVM.


==Latest version==
== Latest version ==
The latest version is [[Java version history#Java SE 21|Java&nbsp;21]], a [[long-term support]] (LTS) version released in September 2023, while Java 17 released in September 2021 is also supported, one of a few older LTS releases down to Java 8 LTS. As an open source platform, Java has many distributors, including [[Amazon (company)|Amazon]], [[IBM]], [[Azul Systems]], and [[AdoptOpenJDK]]. Distributions include Amazon Corretto, Zulu, AdoptOpenJDK, and Liberica. Regarding Oracle, it distributes Java 8, and also makes available e.g. Java 11, both also currently supported LTS versions. Oracle (and others) "highly recommend that you uninstall older versions of Java" than Java 8,<ref>{{cite web|url=https://www.java.com/en/download/faq/remove_olderversions.xml|title=Why should I uninstall older versions of Java from my system?|website=www.java.com|access-date=February 6, 2018|archive-url=https://web.archive.org/web/20180212011608/https://java.com/en/download/faq/remove_olderversions.xml|archive-date=February 12, 2018|url-status=live|df=mdy-all}}</ref> because of serious risks due to unresolved security issues.<ref>{{Cite web|url=https://www.java.com/en/download/faq/remove_olderversions.xml |title=Why should I uninstall older versions of Java from my system? |publisher=Oracle |access-date=2016-09-09}}</ref><ref name="remote exploit" /><ref name="Homeland Security" /> Since Java&nbsp;9 (as well as versions 10, and 12–16, and 18–20) are no longer supported, Oracle advises its users to "immediately transition" to a supported version. Oracle released the last free-for-commercial-use public update for the [[legacy software|legacy]] Java&nbsp;8&nbsp;LTS in January 2019, and will continue to support Java&nbsp;8 with public updates for personal use indefinitely. Oracle extended support for Java&nbsp;6 ended in December 2018.<ref>{{Cite web|url=https://www.oracle.com/technetwork/java/javase/overview-156328.html#R160_191|title=Java SE 6 Advanced|last=Alexander|first=Christopher|website=www.oracle.com|access-date=2018-05-20}}</ref>
The latest version is [[Java version history#Java SE 22|Java&nbsp;22]] released in March 2024, and the latest [[long-term support]] (LTS) version is Java 21 released in September 2023, which is one of a few LTS versions still supported, down to Java 8 LTS. As an open source platform, Java has many distributors, including [[Amazon (company)|Amazon]], [[IBM]], [[Azul Systems]], and [[AdoptOpenJDK]]. Distributions include Amazon Corretto, Zulu, AdoptOpenJDK, and Liberica. Regarding Oracle, it distributes Java 8, and also makes available e.g. Java 11, both also currently supported LTS versions. Oracle (and others) "highly recommend that you uninstall older versions of Java" than Java 8,<ref>{{cite web|url=https://www.java.com/en/download/faq/remove_olderversions.xml|title=Why should I uninstall older versions of Java from my system?|website=www.java.com|access-date=February 6, 2018|archive-url=https://web.archive.org/web/20180212011608/https://java.com/en/download/faq/remove_olderversions.xml|archive-date=February 12, 2018|url-status=live|df=mdy-all}}</ref> because of serious risks due to unresolved security issues.<ref>{{Cite web|url=https://www.java.com/en/download/faq/remove_olderversions.xml |title=Why should I uninstall older versions of Java from my system? |publisher=Oracle |access-date=2016-09-09}}</ref><ref name="remote exploit" /><ref name="Homeland Security" /> Since Java&nbsp;9 (as well as versions 10, and 12–16, and 18–20) are no longer supported, Oracle advises its users to "immediately transition" to a supported version. Oracle released the last free-for-commercial-use public update for the [[legacy software|legacy]] Java&nbsp;8&nbsp;LTS in January 2019, and will continue to support Java&nbsp;8 with public updates for personal use indefinitely. Oracle extended support for Java&nbsp;6 ended in December 2018.<ref>{{Cite web|url=https://www.oracle.com/technetwork/java/javase/overview-156328.html#R160_191|title=Java SE 6 Advanced|last=Alexander|first=Christopher|website=www.oracle.com|access-date=2018-05-20}}</ref>


== Platform ==
== Platform ==
The Java platform is a suite of programs that facilitate developing and running programs written in the [[Java (programming language)|Java]] programming language. A Java platform includes an execution engine (called a [[virtual machine]]), a compiler and a set of [[Library (computing)|libraries]]; there may also be additional [[Server (computing)|servers]] and alternative libraries that depend on the requirements. Java platforms have been implemented for a wide variety of [[electronic hardware|hardware]] and operating systems with a view to enable Java programs to [[Write once, run anywhere|run identically]] on all of them.
The Java platform is a suite of programs that facilitate developing and running programs written in the [[Java (programming language)|Java]] programming language. A Java platform includes an execution engine (called a [[virtual machine]]), a compiler and a set of [[Library (computing)|libraries]]; there may also be additional [[Server (computing)|servers]] and alternative libraries that depend on the requirements. Java platforms have been implemented for a wide variety of [[electronic hardware|hardware]] and operating systems with a view to enable Java programs to [[Write once, run anywhere|run identically]] on all of them.


The Java platform consists of several programs, each of which provides a portion of its overall capabilities. For example, the [[Java compiler]], which converts Java source code into Java bytecode (an intermediate language for the JVM), is provided as part of the [[Java Development Kit]] (JDK). The [[Java Runtime Environment]] (JRE), complementing the JVM with a [[just-in-time compilation|just-in-time (JIT) compiler]], converts intermediate bytecode into native machine code on the fly. The Java platform also includes an extensive set of libraries.
The Java platform consists of several programs, each of which provides a portion of its overall capabilities. For example, the [[Java compiler]], which converts Java source code into Java bytecode (an intermediate language for the JVM), is provided as part of the [[Java Development Kit]] (JDK). The [[Java Runtime Environment]] (JRE), complementing the JVM with a [[just-in-time compilation|just-in-time (JIT) compiler]], converts intermediate bytecode into native machine code on the fly. The Java platform also includes an extensive set of libraries.
Line 39: Line 39:
The essential components in the platform are the Java language compiler, the libraries, and the runtime environment in which Java intermediate bytecode executes according to the rules laid out in the virtual machine specification.
The essential components in the platform are the Java language compiler, the libraries, and the runtime environment in which Java intermediate bytecode executes according to the rules laid out in the virtual machine specification.


===Application domains===
=== Application domains ===
Different platforms target different classes of device and [[application domain]]s:
Different platforms target different classes of device and [[application domain]]s:
* [[Java Card]]: A technology that allows small Java-based applications ([[applet]]s) to be run securely on [[smart card]]s and similar small-memory devices.
* [[Java Card]]: A technology that allows small Java-based applications ([[applet]]s) to be run securely on [[smart card]]s and similar small-memory devices.
Line 46: Line 46:
* [[Jakarta EE]] (Enterprise Edition): Java&nbsp;SE plus various APIs which are useful for [[n-tier|multi-tier]] [[client–server]] [[enterprise application]]s.
* [[Jakarta EE]] (Enterprise Edition): Java&nbsp;SE plus various APIs which are useful for [[n-tier|multi-tier]] [[client–server]] [[enterprise application]]s.


====Java SE====
==== Java SE ====
{{Excerpt|Java SE|only=paragraphs}}
{{Excerpt|Java SE|only=paragraphs}}


====Jakarta EE====
==== Jakarta EE ====
{{Excerpt|Jakarta EE|only=paragraph}}
{{Excerpt|Jakarta EE|only=paragraph}}


Line 65: Line 65:
{{Excerpt|Java Development Kit}}
{{Excerpt|Java Development Kit}}


===Java Runtime Environment===
=== Java Runtime Environment ===
{{Main|HotSpot (virtual machine)}}
{{Main|HotSpot (virtual machine)}}
The Java Runtime Environment (JRE) released by Oracle is a freely available software distribution containing a stand-alone JVM (HotSpot), the Java [[standard library]] ([[Java Class Library]]), a configuration tool, and—until its discontinuation in JDK 9—a browser plug-in. It is the most common Java environment installed on [[personal computer]]s in the laptop and desktop [[form factor (design)|form factor]]. [[Mobile phone]]s including [[feature phone]]s and early [[smartphone]]s that ship with a JVM are most likely to include a JVM meant to run applications targeting [[Java Platform, Micro Edition|Micro Edition]] of the Java platform. Meanwhile, most modern smartphones, [[tablet computer]]s, and other [[handheld PC]]s that run Java apps are most likely to do so through support of the [[Android (operating system)|Android operating system]], which includes an open source virtual machine incompatible with the JVM specification. (Instead, [[Google]]'s Android development tools take Java programs as input and output [[Dalvik (software)|Dalvik]] bytecode, which is the native input format for the virtual machine on Android devices.)
The Java Runtime Environment (JRE) released by Oracle is a freely available software distribution containing a stand-alone JVM (HotSpot), the Java [[standard library]] ([[Java Class Library]]), a configuration tool, and—until its discontinuation in JDK 9—a browser plug-in. It is the most common Java environment installed on [[personal computer]]s in the laptop and desktop [[form factor (design)|form factor]]. [[Mobile phone]]s including [[feature phone]]s and early [[smartphone]]s that ship with a JVM are most likely to include a JVM meant to run applications targeting [[Java Platform, Micro Edition|Micro Edition]] of the Java platform. Meanwhile, most modern smartphones, [[tablet computer]]s, and other [[handheld PC]]s that run Java apps are most likely to do so through support of the [[Android (operating system)|Android operating system]], which includes an open source virtual machine incompatible with the JVM specification. (Instead, [[Google]]'s Android development tools take Java programs as input and output [[Dalvik (software)|Dalvik]] bytecode, which is the native input format for the virtual machine on Android devices.)
Line 83: Line 83:


Third parties have produced many [[compiler]]s or [[interpreter (computing)|interpreters]] that target the JVM. Some of these are for existing languages, while others are for extensions to the Java language. These include:
Third parties have produced many [[compiler]]s or [[interpreter (computing)|interpreters]] that target the JVM. Some of these are for existing languages, while others are for extensions to the Java language. These include:

* [[BeanShell]] – a lightweight scripting language for Java<ref>{{URL|www.beanshell.org/}}</ref> (see also [[JShell]])
* [[BeanShell]] – a lightweight scripting language for Java<ref>{{URL|www.beanshell.org/}}</ref> (see also [[JShell]])
* [[Ceylon (programming language)|Ceylon]] – an object-oriented, strongly statically typed programming language with an emphasis on [[Immutable object|immutability]]
* [[Ceylon (programming language)|Ceylon]] – an object-oriented, strongly- and statically-typed programming language with an emphasis on [[immutable object|immutability]] (and is no longer maintained since 2023)<!-- since abandoned/moved to Eclipse and then unmaintained, was never popular, just not ist it here, or fully comment out?-->
* [[Clojure]] – a modern, [[dynamic programming language|dynamic]], and [[functional programming|functional]] [[dialect (computing)|dialect]] of the [[Lisp (programming language)|Lisp programming language]] on the Java platform
* [[Clojure]] – a modern, [[dynamic programming language|dynamic]], and [[functional programming|functional]] [[dialect (computing)|dialect]] of the [[Lisp (programming language)|Lisp programming language]] on the Java platform
* [[Gosu (programming language)|Gosu]] – a general-purpose Java Virtual Machine-based programming language released under the Apache License 2.0
* [[Gosu (programming language)|Gosu]] – a general-purpose JVM-based programming language released under the Apache License 2.0
* [[Groovy (programming language)|Groovy]] – a fully Java interoperable, Java-syntax-compatible, static and dynamic language with features from Python, Ruby, Perl, and Smalltalk
* [[Groovy (programming language)|Groovy]] – a fully Java-interoperable, Java-syntax-compatible, static and dynamic language with features from Python, Ruby, Perl, and Smalltalk
* [[JRuby]] – a [[Ruby (programming language)|Ruby]] interpreter
* [[JRuby]] – a [[Ruby (programming language)|Ruby]] interpreter
* [[Jython]] – a [[Python (programming language)|Python]] interpreter
* [[Jython]] – a [[Python (programming language)|Python]] interpreter
* [[Kotlin (programming language)|Kotlin]] – an industrial programming language for [[JVM]] with full [[Java (programming language)|Java]] interoperability
* [[Kotlin (programming language)|Kotlin]] – a programming language for a [[JVM]] (and non-JVM, for e.g. desktop <!-- e.g. maxOSArm64--> and iOS<!-- tier 2, planning for tier 1, and already tier 1 for the iOS simulator (running on macOS); e.g. linuxX64 is tier 2 and mingw/Windows 7+ is tier 3. -->) with full [[Java (programming language)|Java]] interoperability (Google's preferred language for Android, its JVM, over Java, which is also still supported there and it previously promoted)
* [[Rhino (JavaScript engine)|Rhino]] – a [[JavaScript]] interpreter
* [[Rhino (JavaScript engine)|Rhino]] – a [[JavaScript]] interpreter
* [[Scala (programming language)|Scala]] – a multi-paradigm programming language with non-Java compatible syntax designed as a "better Java"
* [[Scala (programming language)|Scala]] – a multi-paradigm programming language with non-Java compatible syntax designed as a "better Java"


=== Similar platforms ===
=== Similar platforms ===
{{See also|Comparison of the Java and .NET platforms|Comparison of C Sharp and Java|l2=Comparison of C# and Java}}
{{See also|Comparison of C Sharp and Java|l1=Comparison of C# and Java}}


The success of Java and its [[write once, run anywhere]] concept has led to other similar efforts, notably the [[.NET Framework]], appearing since 2002, which incorporates many of the successful aspects of Java. .NET was built from the ground-up to support multiple programming languages, while the Java platform was initially built to support only the Java language, although many other languages have been made for JVM since. Like Java, .NET languages compile to byte code and are executed by the [[Common Language Runtime]] (CLR), which is similar in purpose to the JVM. Like the JVM, the CLR provides memory management through automatic garbage collection, and allows .NET byte code to run on multiple operating systems.
The success of Java and its [[write once, run anywhere]] concept has led to other similar efforts, notably the [[.NET Framework]], appearing since 2002, which incorporates many of the successful aspects of Java. .NET was built from the ground-up to support multiple programming languages, while the Java platform was initially built to support only the Java language, although many other languages have been made for JVM since. Like Java, .NET languages compile to byte code and are executed by the [[Common Language Runtime]] (CLR), which is similar in purpose to the JVM. Like the JVM, the CLR provides memory management through automatic garbage collection, and allows .NET byte code to run on multiple operating systems.
Line 102: Line 101:
.NET included a Java-like language first named [[Visual J++|J++]], then called [[J Sharp|Visual J#]] that was incompatible with the Java specification. It was discontinued 2007, and support for it ended in 2015.
.NET included a Java-like language first named [[Visual J++|J++]], then called [[J Sharp|Visual J#]] that was incompatible with the Java specification. It was discontinued 2007, and support for it ended in 2015.


==== Performance ====


====Performance====
{{Main|Java performance}}
{{Main|Java performance}}
The JVM specification gives a lot of leeway to implementors regarding the implementation details. Since Java 1.3, JRE from Oracle contains a JVM called HotSpot. It has been designed to be a high-performance JVM.
The JVM specification gives a lot of leeway to implementors regarding the implementation details. Since Java 1.3, JRE from Oracle contains a JVM called HotSpot. It has been designed to be a high-performance JVM.
Line 110: Line 107:
To speed-up code execution, HotSpot relies on just-in-time compilation. To speed-up object allocation and garbage collection, HotSpot uses generational heap.
To speed-up code execution, HotSpot relies on just-in-time compilation. To speed-up object allocation and garbage collection, HotSpot uses generational heap.


====Generational heap====
==== Generational heap ====
The ''Java virtual machine heap'' is the area of memory used by the JVM for [[dynamic memory allocation]].<ref name="hotspotfaq">{{cite web
The ''Java virtual machine heap'' is the area of memory used by the JVM for [[dynamic memory allocation]].<ref name="hotspotfaq">{{cite web
| url=http://java.sun.com/docs/hotspot/gc1.4.2/faq.html
| url=http://java.sun.com/docs/hotspot/gc1.4.2/faq.html
Line 116: Line 113:
| date=6 February 2003
| date=6 February 2003
| publisher=[[Sun Microsystems]]
| publisher=[[Sun Microsystems]]
| access-date=7 February 2009}}</ref>
| access-date=7 February 2009
}}</ref>


In HotSpot the heap is divided into ''generations'':
In HotSpot the heap is divided into ''generations'':
Line 130: Line 128:
| url-status=dead
| url-status=dead
| archive-url=https://web.archive.org/web/20160825183710/https://blogs.oracle.com/jonthecollector/entry/presenting_the_permanent_generation
| archive-url=https://web.archive.org/web/20160825183710/https://blogs.oracle.com/jonthecollector/entry/presenting_the_permanent_generation
| archive-date=25 August 2016}}</ref><ref>{{cite web
| archive-date=25 August 2016
}}</ref><ref>{{cite web
| url=http://blog.headius.com/2008/09/first-taste-of-invokedynamic.html
| url=http://blog.headius.com/2008/09/first-taste-of-invokedynamic.html
| title=A First Taste of InvokeDynamic
| title=A First Taste of InvokeDynamic
| date=11 September 2008
| date=11 September 2008
| last=Nutter|first=Charles
| last=Nutter|first=Charles
| access-date=7 February 2009}}</ref> The ''permanent generation'' was removed from Java 8.<ref>{{cite web
| access-date=7 February 2009
}}</ref> The ''permanent generation'' was removed from Java 8.<ref>{{cite web
| url=http://openjdk.java.net/jeps/122
| url=http://openjdk.java.net/jeps/122
| title=JEP 122: Remove the Permanent Generation
| title=JEP 122: Remove the Permanent Generation
| date=2012-12-04
| date=2012-12-04
| publisher=[[Oracle Corporation]]
| publisher=[[Oracle Corporation]]
| access-date=2014-03-23}}</ref>
| access-date=2014-03-23
}}</ref>


Originally there was no permanent generation, and objects and classes were stored together in the same area. But as class unloading occurs much more rarely than objects are collected, moving class structures to a specific area allowed significant performance improvements.<ref name=permgen/>
Originally there was no permanent generation, and objects and classes were stored together in the same area. But as class unloading occurs much more rarely than objects are collected, moving class structures to a specific area allowed significant performance improvements.<ref name=permgen/>


====Security====
==== Security ====
The Java JRE is installed on a large number of computers. End users with an out-of-date version of JRE therefore are vulnerable to many known attacks. This led to the widely shared belief that Java is inherently insecure.<ref>{{cite web|url=http://lifehacker.com/5988800/what-is-java-is-it-insecure-and-should-i-use-it |title=What Is Java, Is It Insecure, and Should I Use It? |publisher=Lifehacker.com |date=2013-01-14 |access-date=2015-06-26}}</ref> Since Java 1.7, Oracle's JRE for Windows includes automatic update functionality.
The Java JRE is installed on a large number of computers. End users with an out-of-date version of JRE therefore are vulnerable to many known attacks. This led to the widely shared belief that Java is inherently insecure.<ref>{{cite web|url=http://lifehacker.com/5988800/what-is-java-is-it-insecure-and-should-i-use-it |title=What Is Java, Is It Insecure, and Should I Use It? |publisher=Lifehacker.com |date=2013-01-14 |access-date=2015-06-26}}</ref> Since Java 1.7, Oracle's JRE for Windows includes automatic update functionality.


Before the discontinuation of the Java browser plug-in, any web page might have potentially run a Java applet, which provided an easily accessible [[attack surface]] to malicious web sites. In 2013 Kaspersky Labs reported that the Java plug-in was the method of choice for computer criminals. Java exploits are included in many exploit packs that hackers deploy onto hacked web sites.<ref>{{cite web|url=https://www.kaspersky.com/about/news/virus/2013/is_there_any_protection_against_java_exploits |archive-url=https://web.archive.org/web/20150404000409/https://www.kaspersky.com/about/news/virus/2013/is_there_any_protection_against_java_exploits |url-status=dead |archive-date=2015-04-04 |title=Is there any protection against Java exploits? &#124; Kaspersky Lab |publisher=Kaspersky.com |date=2013-09-09 |access-date=2015-06-26}}</ref> Java applets were removed in Java 11, released on September 25, 2018.
Before the discontinuation of the Java browser plug-in, any web page might have potentially run a Java applet, which provided an easily accessible [[attack surface]] to malicious web sites. In 2013 Kaspersky Labs reported that the Java plug-in was the method of choice for computer criminals. Java exploits are included in many exploit packs that hackers deploy onto hacked web sites.<ref>{{cite web|url=https://www.kaspersky.com/about/news/virus/2013/is_there_any_protection_against_java_exploits |archive-url=https://web.archive.org/web/20150404000409/https://www.kaspersky.com/about/news/virus/2013/is_there_any_protection_against_java_exploits |url-status=dead |archive-date=2015-04-04 |title=Is there any protection against Java exploits? &#124; Kaspersky Lab |publisher=Kaspersky.com |date=2013-09-09 |access-date=2015-06-26}}</ref> Java applets were removed in Java 11, released on September 25, 2018.


==Java Versions==
== Java versions ==
{{Main articles|Java version history}}
{{Main|Java version history}}
<!-- Table form used to encourage adding of categories -->

{| class="wikitable"
===Java 17 (2021)===
! Java<br />version
Java 17, a Long Term Support (LTS) release,
! Year
comes with several enhancements. It provides
! Changes
pattern matching for '''switch''' statements
|-
and '''sealed classes'''.
| 23 || 2024 ||

|-
===Java 16 (2021)===
| 21 || 2023 || A Long-Term Support (LTS) release
Java 16 introduces '''record classes''',
|-
'''pattern matching''', and '''sealed classes'''
| 17 || 2021 || An LTS release, has several enhancements, provides pattern matching for ''switch'' statements and ''sealed classes''
for enhanced data modelling capabilities.
|-

| 16 || 2021 || Introduced ''record classes'', ''pattern matching'', and ''sealed classes'' for enhanced data modelling abilities
===Java 15 (2020)===
|-
Java 15 introduced '''text blocks''' and
'''sealed classes''' as preview features,
| 15 || 2020 || Introduced ''text blocks'', ''sealed classes'' as preview features, enhancing string and class handling
|-
enhancing string and class handling.
| 14 || 2020 || Introduced new features ''record classes'' and ''pattern matching'' for ''instanceof'' as preview features

|-
===Java 14 (2020)===
| 13 || 2019 || Included enhancements, ''text blocks'', reimplementation of legacy ''Socket API''
Java 14 brought new features such as
|-
'''record classes''' and '''pattern matching'''
| 12 || 2019 || Introduced ''switch expressions'', new ''Shenandoah'' garbage collector
for '''instanceof''' as preview features.
|-

| 11 || 2018 || An LTS release, introduced new ''HTTP Client'', removed Java EE and CORBA modules
===Java 13 (2019)===
|-
Java 13 included enhancements like
| 10 || 2018 || Introduced ''Local-Variable Type Inference'' (var), allows declaring local variables without specifying type
'''text blocks''' and reimplementation
|-
of the legacy '''Socket API'''.
| 9 || 2017 || Introduced ''Java Platform Module System'' (JPMS) for modularizing applications, ''JShell'' interactive Java REPL

|-
===Java 12 (2019)===
| 8 || 2014 || Major release, introduced ''Lambda Expressions'', new ''Date and Time API'' for better productivity
Java 12 introduced '''switch expressions'''
|-
and the new '''Shenandoah''' garbage collector.
| 7 || 2011 || Introduced ''try-with-resources'', ''Switch on String'', ''Diamond Operator'', included expanded exception handling, new file I/O library (NIO.2)

|-
===Java 11 (2018)===
| 6 || 2006 || Introduced ''Scripting Language Support'' (JSR 223), ''Web Service Enhancements'', provided JDBC 4.0 with SQL XML support
Java 11, a LTS release, introduced the new
|-
'''HTTP Client'''. It also removed Java EE and
| 5 || 2004 || Significant release, included ''Generics'', an ''Enhanced for Loop'', ''Autoboxing/Unboxing'', ''Static Import'', ''Varargs'', ''Enumerations'', ''Annotations''
CORBA modules.
|-

| 4 || 2002 || Introduced ''Regular Expressions'', ''Exception Chaining'', new set of I/O APIs named NIO (New Input/Output), new ''Logging API''
===Java 10 (2018)===
|-
Java 10 introduced '''Local-Variable Type Inference''' (var), which allows developers
| 3 || 2000 || Included new Sun JVM named ''HotSpot'', introduced ''Java Naming and Directory Interface'' (JNDI), ''Java Platform Debugger Architecture'' (JPDA)
to declare local variables without specifying
|-
their type.
| 2 || 1998 || Introduced ''Collections Framework'', ''Java String memory map for constants'', a ''Just In Time (JIT) compiler'', and ''Swing API for GUIs''

|-
===Java 9 (2017)===
| 1.1 || 1997 || Introduced ''Inner Classes'', ''Reflection'', ''Java Beans'', ''JDBC API'' for database access
Java 9 introduced the '''Java Platform Module System''' (JPMS) for modularizing applications
|-
and '''JShell''', an interactive Java REPL.
| 1.0 || 1996 || First version of Java programming language, introduced object-oriented programming and bytecode in Java, which made Java cross-platform

|}
===Java 8 (2014)===
Java 8 is a major release that introduced
'''Lambda Expressions''' and a new '''Date and Time API''' for better productivity.

===Java 7 (2011)===
Java 7 introduced '''try-with-resources''',
'''Switch on String''', and '''Diamond Operator'''.
It also included expanded exception handling
and a new file I/O library (NIO.2).

===Java 6 (2006)===
Java 6 introduced '''Scripting Language Support'''
(JSR 223) and '''Web Service Enhancements'''.
It also provided JDBC 4.0 with SQL XML support.

===Java 5 (2004)===
Java 5 was a significant release that included
'''Generics''', an '''Enhanced for Loop''',
'''Autoboxing/Unboxing''', '''Static Import''',
'''Varargs''', '''Enumerations''', and '''Annotations'''.

===Java 4 (2002)===
Java 4 introduced '''Regular Expressions''',
'''Exception Chaining''', and a new set of
I/O APIs known as NIO (New Input/Output).
It also included a new '''Logging API'''.

===Java 3 (2000)===
Java 3 included Sun's new JVM known as
'''HotSpot'''. It also introduced '''Java Naming and Directory Interface''' (JNDI) and
'''Java Platform Debugger Architecture''' (JPDA).

===Java 2 (1998)===
Java 2 introduced the '''Collections Framework''',
'''Java String memory map for constants''', a
'''Just In Time (JIT) compiler''', and the
'''Swing API for GUIs'''.

===Java 1.1 (1997)===
Java 1.1 introduced '''Inner Classes''',
'''Reflection''', '''Java Beans''', and the
'''JDBC API''' for database access.

===Java 1.0 (1996)===
Java 1.0 was the first version of the Java
programming language. It introduced
object-oriented programming and bytecode,
which made Java platform-independent.


== History ==
== History ==
Line 252: Line 206:
|url=http://java.sun.com/features/1998/05/birthday.html
|url=http://java.sun.com/features/1998/05/birthday.html
|title=Java Technology: The Early Years
|title=Java Technology: The Early Years
|first=Jon |last=Byous
|first=Jon |last=Byous
|date=April 2003
|date=April 2003
|publisher=[[Sun Microsystems]]
|publisher=[[Sun Microsystems]]
|access-date=2009-08-02
|access-date=2009-08-02
|archive-url=https://web.archive.org/web/20080530073139/http://java.sun.com/features/1998/05/birthday.html |archive-date=May 30, 2008}}</ref>
|archive-url=https://web.archive.org/web/20080530073139/http://java.sun.com/features/1998/05/birthday.html |archive-date=May 30, 2008
}}</ref>


The team originally considered using C++, but rejected it for several reasons. Because they were developing an [[embedded system]] with limited resources, they decided that C++ needed too much memory and that its complexity led to developer errors. The language's lack of [[garbage collection (computer science)|garbage collection]] meant that programmers had to manually manage system memory, a challenging and error-prone task. The team also worried about the C++ language's lack of portable facilities for security, [[distributed programming]], and [[thread (computer science)|threading]]. Finally, they wanted a platform that would port easily to all types of devices.
The team originally considered using C++, but rejected it for several reasons. Because they were developing an [[embedded system]] with limited resources, they decided that C++ needed too much memory and that its complexity led to developer errors. The language's lack of [[garbage collection (computer science)|garbage collection]] meant that programmers had to manually manage system memory, a challenging and error-prone task. The team also worried about the C++ language's lack of portable facilities for security, [[distributed programming]], and [[thread (computer science)|threading]]. Finally, they wanted a platform that would port easily to all types of devices.
Line 266: Line 221:
|url=http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/J2eeTutorialForeword.html
|url=http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/J2eeTutorialForeword.html
|title=Foreword
|title=Foreword
|first=Kathy |last=Walrath
|first=Kathy |last=Walrath
|publisher=[[Sun Microsystems]]
|publisher=[[Sun Microsystems]]
|date=2001-12-21
|date=2001-12-21
|access-date=2009-08-02}}
|access-date=2009-08-02
}}
</ref> The Firstperson team had an interest in building highly interactive devices, and when [[Time Warner]] issued a [[request for proposal]] (RFP) for a [[set-top box]], Firstperson changed their target and responded with a proposal for a set-top box platform. However, the [[cable TV|cable]] industry felt that their platform gave too much control to the user, so Firstperson lost their bid to [[Silicon Graphics|SGI]]. An additional deal with [[The 3DO Company]] for a set-top box also failed to materialize. Unable to generate interest within the television industry, the company was rolled back into Sun.
</ref> The Firstperson team had an interest in building highly interactive devices, and when [[Time Warner]] issued a [[request for proposal]] (RFP) for a [[set-top box]], Firstperson changed their target and responded with a proposal for a set-top box platform. However, the [[cable TV|cable]] industry felt that their platform gave too much control to the user, so Firstperson lost their bid to [[Silicon Graphics|SGI]]. An additional deal with [[The 3DO Company]] for a set-top box also failed to materialize. Unable to generate interest within the television industry, the company was rolled back into Sun.


Line 284: Line 240:
|access-date=2020-07-15
|access-date=2020-07-15
|quote='The lawyers had told us that we couldn't use the name "OAK" because [it was already trademarked by] Oak Technologies,' said Frank Yellin, a senior engineer at Sun. 'So a brainstorming session was held to come up with ideas for a new name.'
|quote='The lawyers had told us that we couldn't use the name "OAK" because [it was already trademarked by] Oak Technologies,' said Frank Yellin, a senior engineer at Sun. 'So a brainstorming session was held to come up with ideas for a new name.'
}}</ref> Sun priced Java licenses below cost to gain market share.<ref>{{cite magazine|last1=Bank|first1=David|date=1995-12-01|url=https://www.wired.com/1995/12/java-saga/|title=The Java Saga|magazine=[[Wired (magazine)|Wired]]|access-date=2022-10-04|quote="'It's priced below our cost,' Schmidt says. 'This loses money in the licensing business for the foreseeable future. It's a strategic investment in market share.'"}}</ref> Although Java&nbsp;1.0a became available for download in 1994, the first public release of Java, Java 1.0a2 with the HotJava browser, came on May 23, 1995, announced by Gage at the [[SunWorld]] conference. Accompanying Gage's announcement, [[Marc Andreessen]], Executive Vice President of [[Netscape Communications Corporation]], unexpectedly announced that Netscape browsers would include Java support. On January 9, 1996, Sun Microsystems formed the JavaSoft group to develop the technology.<ref>{{cite press release |url=https://www.sun.com/smi/Press/sunflash/1996-01/sunflash.960109.14048.xml |title=Sun Microsystems announces formation of JavaSoft |date=1996-01-09 |df=dmy |publisher=Sun Microsystems |archive-url=https://web.archive.org/web/20080210061535/https://www.sun.com/smi/Press/sunflash/1996-01/sunflash.960109.14048.xml |archive-date=2008-02-10}}</ref>
}}</ref> Sun priced Java licenses below cost to gain market share.<ref>{{cite magazine|last1=Bank|first1=David|date=1995-12-01|url=https://www.wired.com/1995/12/java-saga/|title=The Java Saga|magazine=[[Wired (magazine)|Wired]]|access-date=2022-10-04|quote="'It's priced below our cost,' Schmidt says. 'This loses money in the licensing business for the foreseeable future. It's a strategic investment in market share.'"}}</ref> Although Java&nbsp;1.0a became available for download in 1994, the first public release of Java, Java 1.0a2 with the HotJava browser, came on May 23, 1995, announced by Gage at the SunWorld conference. Accompanying Gage's announcement, [[Marc Andreessen]], Executive Vice President of [[Netscape Communications Corporation]], unexpectedly announced that Netscape browsers would include Java support. On January 9, 1996, Sun Microsystems formed the JavaSoft group to develop the technology.<ref>{{cite press release |url=https://www.sun.com/smi/Press/sunflash/1996-01/sunflash.960109.14048.xml |title=Sun Microsystems announces formation of JavaSoft |date=1996-01-09 |df=dmy |publisher=Sun Microsystems |archive-url=https://web.archive.org/web/20080210061535/https://www.sun.com/smi/Press/sunflash/1996-01/sunflash.960109.14048.xml |archive-date=2008-02-10}}</ref>


While the so-called Java applets for web browsers no longer are the most popular use of Java (with it e.g. more used server-side) or the most popular way to run code client-side (JavaScript took over as more popular), it still is possible to run Java (or other JVM languages such as Kotlin) in web browsers, even after JVM support has been dropped from them, using e.g. [[TeaVM]].
While the so-called Java applets for web browsers no longer are the most popular use of Java (with it e.g. more used server-side) or the most popular way to run code client-side (JavaScript took over as more popular), it still is possible to run Java (or other JVM languages such as Kotlin) in web browsers, even after JVM support has been dropped from them, using e.g. [[TeaVM]].


===GNU General Public License===
=== GNU General Public License ===
On November 13, 2006, Sun Microsystems made the bulk of its implementation of Java available under the [[GNU General Public License]] (GPL).<ref>{{cite web |url=https://www.sun.com/2006-1113/feature/story.jsp |archive-url=https://web.archive.org/web/20080513023707/http://www.sun.com/2006-1113/feature/story.jsp |archive-date=2008-05-13 |title=Sun Opens Java |date=13 November 2006 |publisher=Sun Microsystems}}</ref><ref>{{cite web |url=https://mail.openjdk.java.net/pipermail/build-dev/2010-December/003881.html |title=OpenJDK7 and OpenJDK6 Binary Plugs Logic Removed |first=Kelly |last=O'Hair |publisher=[[Oracle Corporation]] |date=December 2010 |access-date=2011-11-25}}</ref>
On November 13, 2006, Sun Microsystems made the bulk of its implementation of Java available under the [[GNU General Public License]] (GPL).<ref>{{cite web |url=https://www.sun.com/2006-1113/feature/story.jsp |archive-url=https://web.archive.org/web/20080513023707/http://www.sun.com/2006-1113/feature/story.jsp |archive-date=2008-05-13 |title=Sun Opens Java |date=13 November 2006 |publisher=Sun Microsystems}}</ref><ref>{{cite web |url=https://mail.openjdk.java.net/pipermail/build-dev/2010-December/003881.html |title=OpenJDK7 and OpenJDK6 Binary Plugs Logic Removed |first=Kelly |last=O'Hair |publisher=[[Oracle Corporation]] |date=December 2010 |access-date=2011-11-25}}</ref>


Line 311: Line 267:
In June 2016, after the last public update of Java&nbsp;7,<ref>{{Cite web|url=https://www.java.com/en/download/faq/release_dates.xml|title=Java 7 and Java 8 Releases by Date|website=www.java.com}}</ref> "[[Exploit (computer security)|remotely exploitable]]" security bugs in Java&nbsp;6, 7, and 8 were announced.<ref name="remote exploit">{{Cite web|url=https://www.oracle.com/security-alerts/cpujul2016.html|title=Oracle Critical Patch Update - July 2016|website=www.oracle.com}}</ref>
In June 2016, after the last public update of Java&nbsp;7,<ref>{{Cite web|url=https://www.java.com/en/download/faq/release_dates.xml|title=Java 7 and Java 8 Releases by Date|website=www.java.com}}</ref> "[[Exploit (computer security)|remotely exploitable]]" security bugs in Java&nbsp;6, 7, and 8 were announced.<ref name="remote exploit">{{Cite web|url=https://www.oracle.com/security-alerts/cpujul2016.html|title=Oracle Critical Patch Update - July 2016|website=www.oracle.com}}</ref>


''Java SE 8'' (March 18, 2014){{snd}} Codename ''Kenai''. Notable changes include language-level support for [[Lambda (programming)|lambda expressions]] ([[closure (computer science)|closures]]) and default methods, the Project Nashorn JavaScript runtime, a new Date and Time API inspired by Joda Time, and the removal of PermGen. This version is not officially supported on the [[Windows XP]] platform.<ref>{{cite web|url=http://www.java.com/en/download/faq/winxp.xml |title=Windows XP and Java |publisher=Java.com |date=2014-04-08 |access-date=2016-02-09}}</ref> However, due to the end of Java&nbsp;7's lifecycle it is the recommended version for XP users. Previously, only an unofficial manual installation method had been described for Windows XP SP3. It refers to JDK8, the developing platform for Java that also includes a fully functioning [[Java Runtime Environment]].<!-- What is not advised is enabling the JRE for browser use, which is a possible next step. The main JDK installation has no such comment. --><ref>{{Cite web|url=https://stackoverflow.com/questions/20965564/installing-jdk8-on-windows-xp-advapi32-dll-error|title=java - installing JDK8 on Windows XP - advapi32.dll error|website=Stack Overflow}}</ref> Java&nbsp;8 is supported on Windows Server 2008 R2 SP1, Windows Vista SP2 and Windows 7 SP1, Ubuntu 12.04 LTS and higher (and some other OSes).<ref>{{Cite web|url=https://www.oracle.com/technetwork/java/javase/certconfig-2095354.html|title=Oracle JDK 8 and JRE 8 Certified System Configurations|website=www.oracle.com}}</ref>
''Java SE 8'' (March 18, 2014){{snd}} Codename ''Kenai''. Notable changes include language-level support for [[Lambda (programming)|lambda expressions]] ([[closure (computer science)|closures]]) and default methods, the Project Nashorn JavaScript runtime, a new Date and Time API inspired by Joda Time, and the removal of PermGen. This version is not officially supported on the [[Windows XP]] platform,<ref>{{cite web|url=http://www.java.com/en/download/faq/winxp.xml |title=Windows XP and Java |publisher=Java.com |date=2014-04-08 |access-date=2016-02-09}}</ref> but is known to work there. Thus, due to the end of Java&nbsp;7's lifecycle it is the recommended version for XP users. Previously, only an unofficial manual installation method had been described for Windows XP SP3. It refers to JDK8, the developing platform for Java that also includes a fully functioning [[Java Runtime Environment]].<!-- What is not advised is enabling the JRE for browser use, which is a possible next step. The main JDK installation has no such comment. --><ref>{{Cite web|url=https://stackoverflow.com/questions/20965564/installing-jdk8-on-windows-xp-advapi32-dll-error|title=java - installing JDK8 on Windows XP - advapi32.dll error|website=Stack Overflow}}</ref> Java&nbsp;8 is supported on Windows Server 2008 R2 SP1, Windows Vista SP2 and Windows 7 SP1, Ubuntu 12.04 LTS and higher (and some other OSes).<ref>{{Cite web|url=https://www.oracle.com/technetwork/java/javase/certconfig-2095354.html|title=Oracle JDK 8 and JRE 8 Certified System Configurations|website=www.oracle.com}}</ref>


''Java SE 9'' and ''10'' had higher system requirements, i.e. Windows&nbsp;7 or Server 2012 (and web browser minimum certified is upped to [[Internet Explorer 11]] or other web browsers), and Oracle dropped [[32-bit]] compatibility for all platforms, i.e. only Oracle's "[[64-bit computing|64-bit]] Java virtual machines (JVMs) are certified".<ref>{{Cite web|url=https://www.oracle.com/technetwork/java/javaseproducts/documentation/jdk10certconfig-4417031.html|title=Oracle JDK 10 Certified System Configurations|quote=Only X.org Mode supported. [[Wayland (display server protocol)|Wayland]] mode is unsupported.|website=www.oracle.com|access-date=2018-03-27}}</ref>
''Java SE 9'' and ''10'' have higher system requirements, i.e. Windows&nbsp;7 or Server 2012 (and web browser minimum certified is upped to [[Internet Explorer 11]] or other web browsers), and Oracle dropped [[32-bit]] compatibility for all platforms, i.e. only Oracle's "[[64-bit computing|64-bit]] Java virtual machines (JVMs) are certified".<ref>{{Cite web|url=https://www.oracle.com/technetwork/java/javaseproducts/documentation/jdk10certconfig-4417031.html|title=Oracle JDK 10 Certified System Configurations|quote=Only X.org Mode supported. [[Wayland (display server protocol)|Wayland]] mode is unsupported.|website=www.oracle.com|access-date=2018-03-27}}</ref>


''Java SE 11'' was released September 2018, the first [[Long-term support|LTS]] release since the [[Release early, release often|rapid release]] model was adopted starting with version 9. For the first time, OpenJDK 11 represents the complete source code for the Java platform under the GNU General Public License, and while Oracle still dual-licenses it with an optional proprietary license, there are no code differences nor modules unique to the proprietary-licensed version.<ref>{{cite web|url=https://www.oracle.com/technetwork/java/javase/eol-135779.html|date=2018-09-25|access-date=2018-09-25|title=Oracle Java SE Support Roadmap|publisher=[[Oracle Corporation]]}}</ref> Java&nbsp;11 features include two new garbage collector implementations, Flight Recorder to debug deep issues, a new HTTP client including [[WebSocket]] support.<ref>{{cite web|url=https://openjdk.java.net/projects/jdk/11/|title=JDK 11|date=2018-09-25|access-date=2018-09-26|publisher=[[Oracle Corporation]]}}</ref>
''Java SE 11'' LTS was released September 2018, the first [[long-term support|LTS]] release since the [[release early, release often|rapid release]] model was adopted starting with version 9. For the first time, OpenJDK 11 represents the complete source code for the Java platform under the GNU General Public License, and while Oracle still dual-licenses it with an optional proprietary license, there are no code differences nor modules unique to the proprietary-licensed version.<ref>{{cite web|url=https://www.oracle.com/technetwork/java/javase/eol-135779.html|date=2018-09-25|access-date=2018-09-25|title=Oracle Java SE Support Roadmap|publisher=[[Oracle Corporation]]}}</ref> Java&nbsp;11 features include two new garbage collector implementations, Flight Recorder to debug deep issues, a new HTTP client including [[WebSocket]] support.<ref>{{cite web|url=https://openjdk.java.net/projects/jdk/11/|title=JDK 11|date=2018-09-25|access-date=2018-09-26|publisher=[[Oracle Corporation]]}}</ref>


''Java SE 12'' was released March 2019.<ref>{{cite web |title=JDK 12 |url=https://openjdk.java.net/projects/jdk/12/ |website=OpenJDK |access-date=22 March 2019}}</ref>
''Java SE 12'' was released March 2019.<ref>{{cite web |title=JDK 12 |url=https://openjdk.java.net/projects/jdk/12/ |website=OpenJDK |access-date=22 March 2019}}</ref>
Line 327: Line 283:
''Java SE 16'' was released March 2021.
''Java SE 16'' was released March 2021.


''Java SE 17'' was released September 2021.
''Java SE 17'' LTS was released September 2021.


''Java SE 18'' was released March 2022.
''Java SE 18'' was released March 2022.
Line 334: Line 290:


''Java SE 20'' was released March 2023.
''Java SE 20'' was released March 2023.

''Java SE 21'' LTS was released September 2023.

''Java SE 22'' was released March 2024.


In addition to language changes, significant 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.0. Entire new APIs, such as [[Swing (Java)|Swing]] and [[Java 2D]], have evolved, and many of the original JDK&nbsp;1.0 classes and methods have been [[deprecation|deprecated]] (thereof some "terminally deprecated"), e.g. related to finalization.<ref>{{Cite web |title=Deprecated List (Java SE 22) |url=https://cr.openjdk.org/~iris/se/22/latestSpec/api/deprecated-list.html |access-date=2024-04-16 |website=cr.openjdk.org}}</ref>
In addition to language changes, significant 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.0. Entire new APIs, such as [[Swing (Java)|Swing]] and [[Java 2D]], have evolved, and many of the original JDK&nbsp;1.0 classes and methods have been [[deprecation|deprecated]] (thereof some "terminally deprecated"), e.g. related to finalization.<ref>{{Cite web |title=Deprecated List (Java SE 22) |url=https://cr.openjdk.org/~iris/se/22/latestSpec/api/deprecated-list.html |access-date=2024-04-16 |website=cr.openjdk.org}}</ref>


At least one very rarely-used API (for threading) has been removed from Java 22.<!-- "A corpus analysis of 30M classes in 131k artifacts from Maven Central found only 1 usages to this method. The 1 usage appears to be a class that just wraps all methods, it doesn't actually make use of it.: https://github.com/openjdk/jdk/pull/14257 --> <ref>{{Cite web |title=Remove Thread.countStackFrames |url=https://bugs.openjdk.org/browse/JDK-8309196 |access-date=2024-04-16 |website=bugs.openjdk.org}}</ref><ref>{{Cite web |title=Java SE 22 ( JSR 397) |url=https://cr.openjdk.org/~iris/se/22/latestSpec/#APIs-removed |access-date=2024-04-16 |website=cr.openjdk.org}}</ref>
At least one very rarely-used API (for threading) has been removed from Java 22.<!-- "A corpus analysis of 30M classes in 131k artifacts from Maven Central found only 1 usages to this method. The 1 usage appears to be a class that just wraps all methods, it doesn't actually make use of it.: https://github.com/openjdk/jdk/pull/14257 --><ref>{{Cite web |title=Remove Thread.countStackFrames |url=https://bugs.openjdk.org/browse/JDK-8309196 |access-date=2024-04-16 |website=bugs.openjdk.org}}</ref><ref>{{Cite web |title=Java SE 22 ( JSR 397) |url=https://cr.openjdk.org/~iris/se/22/latestSpec/#APIs-removed |access-date=2024-04-16 |website=cr.openjdk.org}}</ref>


== Usage ==
== Usage ==


=== Desktop use ===
=== Desktop use ===
[[File:FrostWire-Vista.png|thumb|A Java program running on a [[Windows Vista]] desktop computer (supported by Java&nbsp;8, but not officially by later versions, such as Java&nbsp;11)]]
[[File:FrostWire-Vista.png|thumb|A Java program running on a [[Windows Vista]] desktop (supported by Java&nbsp;8, <!-- Can we have an example on a modern still-support OS, e.g. with Java 21? --> but not officially by later versions, such as Java&nbsp;11) desktop computer]]

Current Java is supported on 64-bit Windows 10 (and Server 2016) and later, 64-bit macOS 13.x and later, and 64-bit Linux (e.g. Oracle Enterprise Linux). Others are not supported by Oracle (for building, but may be by IBM, SAP etc.), though are known to work e.g. AIX, Ubuntu, RHEL, and Alphine/[[musl]]. 32-bit Windows support is deprecated since Java 22 (and 32-bit JVM no longer builds without non-default options).

According to Oracle in 2010, the Java Runtime Environment was found on over 850 million PCs.<ref>{{cite web|title=What is Java technology and why do I need it? |url=http://java.com/en/download/faq/whatis_java.xml |access-date=15 December 2011 |archive-url=https://web.archive.org/web/20100925204716/https://java.com/en/download/faq/whatis_java.xml |archive-date=25 September 2010 |quote=Java runs on more than 850 million personal computers worldwide, and on billions of devices worldwide, including mobile and TV devices.}}</ref> [[Microsoft]] has not bundled a [[Java virtual machine|Java Runtime Environment]] (JRE) with its [[operating system]]s since Sun Microsystems sued Microsoft for adding Windows-specific classes to the bundled Java runtime environment, and for making the new classes available through [[Visual J++]].{{Citation needed|date=December 2011}} Apple no longer includes a Java runtime with [[OS X]] as of [[Mac OS X Lion|version 10.7]], but the system prompts the user to download and install it the first time an application requiring the JRE is launched.{{Citation needed|date=July 2014}} Many [[Linux distribution]]s include the [[OpenJDK]] runtime as the default virtual machine, negating the need to download the proprietary Oracle JRE.<ref>{{Cite web|url=https://fedoraproject.org/wiki/Java|title=Java - Fedora Project Wiki|website=fedoraproject.org}}</ref>
According to Oracle in 2010, the Java Runtime Environment was found on over 850 million PCs.<ref>{{cite web|title=What is Java technology and why do I need it? |url=http://java.com/en/download/faq/whatis_java.xml |access-date=15 December 2011 |archive-url=https://web.archive.org/web/20100925204716/https://java.com/en/download/faq/whatis_java.xml |archive-date=25 September 2010 |quote=Java runs on more than 850 million personal computers worldwide, and on billions of devices worldwide, including mobile and TV devices.}}</ref> [[Microsoft]] has not bundled a [[Java virtual machine|Java Runtime Environment]] (JRE) with its [[operating system]]s since Sun Microsystems sued Microsoft for adding Windows-specific classes to the bundled Java runtime environment, and for making the new classes available through [[Visual J++]].{{Citation needed|date=December 2011}} Apple no longer includes a Java runtime with [[OS X]] as of [[Mac OS X Lion|version 10.7]], but the system prompts the user to download and install it the first time an application requiring the JRE is launched.{{Citation needed|date=July 2014}} Many [[Linux distribution]]s include the [[OpenJDK]] runtime as the default virtual machine, negating the need to download the proprietary Oracle JRE.<ref>{{Cite web|url=https://fedoraproject.org/wiki/Java|title=Java - Fedora Project Wiki|website=fedoraproject.org}}</ref>


Some Java applications are in fairly widespread desktop use, including the [[NetBeans]] and [[Eclipse (software)|Eclipse]] [[integrated development environment]]s, and file sharing clients such as [[LimeWire]] and [[Vuze]]. Java is also used in the [[MATLAB]] mathematics programming environment, both for rendering the [[user interface]] and as part of the core system. Java provides cross platform user interface for some high end collaborative applications such as [[IBM Lotus Notes|Lotus Notes]].
Some Java applications are in fairly widespread desktop use, including the [[NetBeans]], [[Eclipse (software)|Eclipse]] and [[JetBrains]]<ref>{{Cite web|url=https://www.jetbrains.com/opensource/idea/|title=IntelliJ Platform}}</ref> [[integrated development environment]]s, and file sharing clients such as [[LimeWire]] and [[Vuze]]. Java is also used in the [[MATLAB]] mathematics programming environment, both for rendering the [[user interface]] and as part of the core system. Java provides cross platform user interface for some high end collaborative applications such as [[IBM Lotus Notes|Lotus Notes]].


Oracle plans to first deprecate the separately installable Java browser plugin from the Java Runtime Environment in JDK 9 then remove it completely from a future release, forcing web developers to use an alternative technology.<ref>{{cite web|url=https://blogs.oracle.com/java-platform-group/entry/moving_to_a_plugin_free |title=Moving to a plugin-free web |first=Dalibor |last=Topic |date=27 January 2016 |publisher=Oracle}}</ref>
Oracle plans to first deprecate the separately installable Java browser plugin from the Java Runtime Environment in JDK 9 then remove it completely from a future release, forcing web developers to use an alternative technology.<ref>{{cite web|url=https://blogs.oracle.com/java-platform-group/entry/moving_to_a_plugin_free |title=Moving to a plugin-free web |first=Dalibor |last=Topic |date=27 January 2016 |publisher=Oracle}}</ref>
Line 372: Line 335:
Sun's goal was to replace the parts that remain proprietary and closed-source with alternative implementations and make the class library completely free and open source. In the meantime, a third-party project called [[IcedTea]] created a completely free and highly usable JDK by replacing encumbered code with either stubs or code from [[GNU Classpath]]. However OpenJDK has since become buildable without the encumbered parts (from OpenJDK 6 b10<ref>{{cite web |url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2008-June/000060.html |title=OpenJDK6 b10 source posted |date=2007-05-30 |access-date=2008-07-12 |last=Wielaard |first=Mark}}</ref>) and has become the default runtime environment for most Linux distributions.<ref>{{cite web |url=https://access.redhat.com/documentation/en-US/JBoss_Enterprise_Application_Platform/6/html/Administration_and_Configuration_Guide/Configure_the_Default_JDK_on_Red_Hat_Enterprise_Linux.html | title=Redhat Java}}</ref><ref>{{cite web |url=https://fedoraproject.org/wiki/Java/FAQ | title=Fedora Java}}</ref><ref>{{cite web |url=https://wiki.debian.org/Java | title=Debian Java}}</ref><ref>{{cite web |url=https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-get-on-ubuntu-16-04 | title=Ubuntu Java}}</ref>
Sun's goal was to replace the parts that remain proprietary and closed-source with alternative implementations and make the class library completely free and open source. In the meantime, a third-party project called [[IcedTea]] created a completely free and highly usable JDK by replacing encumbered code with either stubs or code from [[GNU Classpath]]. However OpenJDK has since become buildable without the encumbered parts (from OpenJDK 6 b10<ref>{{cite web |url=http://mail.openjdk.java.net/pipermail/jdk6-dev/2008-June/000060.html |title=OpenJDK6 b10 source posted |date=2007-05-30 |access-date=2008-07-12 |last=Wielaard |first=Mark}}</ref>) and has become the default runtime environment for most Linux distributions.<ref>{{cite web |url=https://access.redhat.com/documentation/en-US/JBoss_Enterprise_Application_Platform/6/html/Administration_and_Configuration_Guide/Configure_the_Default_JDK_on_Red_Hat_Enterprise_Linux.html | title=Redhat Java}}</ref><ref>{{cite web |url=https://fedoraproject.org/wiki/Java/FAQ | title=Fedora Java}}</ref><ref>{{cite web |url=https://wiki.debian.org/Java | title=Debian Java}}</ref><ref>{{cite web |url=https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-get-on-ubuntu-16-04 | title=Ubuntu Java}}</ref>


In June 2008, it was announced that [[IcedTea]]6 (as the packaged version of OpenJDK on [[Fedora (Linux distribution)|Fedora 9]]) has passed the [[Technology Compatibility Kit]] tests and can claim to be a fully compatible Java&nbsp;6 implementation.<ref>{{cite web
In June 2008, it was announced that [[IcedTea]]6 (as the packaged version of OpenJDK on [[Fedora Linux|Fedora 9]]) has passed the [[Technology Compatibility Kit]] tests and can claim to be a fully compatible Java&nbsp;6 implementation.<ref>{{cite web
|url=http://blog.softwhere.org/archives/196
|url=http://blog.softwhere.org/archives/196
|title=Java is finally Free and Open
|title=Java is finally Free and Open
|date=2008-06-19
|date=2008-06-19
|last=Sharples
|last=Sharples
|first=Rich
|first=Rich
|url-status=dead
|url-status=dead
|archive-url=https://web.archive.org/web/20080620065024/http://blog.softwhere.org/archives/196
|archive-url=https://web.archive.org/web/20080620065024/http://blog.softwhere.org/archives/196
|archive-date=2008-06-20
|archive-date=2008-06-20
}}</ref>
}}</ref>


Line 402: Line 365:
| title=Java libraries should provide support for unsigned integer arithmetic
| title=Java libraries should provide support for unsigned integer arithmetic
| url=http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4504839
| url=http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4504839
| access-date=2011-01-18}}</ref>
| access-date=2011-01-18
}}</ref>
Although it is possible to partially circumvent this problem with conversion code and using larger data types, it makes using Java cumbersome for handling the unsigned data. While a 32-bit signed integer may be used to hold a 16-bit unsigned value with relative ease, a 32-bit unsigned value would require a 64-bit signed integer. Additionally, a 64-bit unsigned value cannot be stored using any integer type in Java because no type larger than 64&nbsp;bits exists in the Java language. If abstracted using functions, function calls become necessary for many operations which are native to some other languages. Alternatively, it is possible to use Java's signed integers to emulate unsigned integers of the same size, but this requires detailed knowledge of complex bitwise operations.<ref>{{cite web |url=http://darksleep.com/player/JavaAndUnsignedTypes.html |title=Java and unsigned int, unsigned short, unsigned byte, unsigned long, etc. (Or rather, the lack thereof) |first=Sean R. |last=Owens |date=2009-11-05 |work=darksleep.com |access-date=2010-10-09}}</ref>
Although it is possible to partially circumvent this problem with conversion code and using larger data types, it makes using Java cumbersome for handling the unsigned data. While a 32-bit signed integer may be used to hold a 16-bit unsigned value with relative ease, a 32-bit unsigned value would require a 64-bit signed integer. Additionally, a 64-bit unsigned value cannot be stored using any integer type in Java because no type larger than 64&nbsp;bits exists in the Java language. If abstracted using functions, function calls become necessary for many operations which are native to some other languages. Alternatively, it is possible to use Java's signed integers to emulate unsigned integers of the same size, but this requires detailed knowledge of complex bitwise operations.<ref>{{cite web |url=http://darksleep.com/player/JavaAndUnsignedTypes.html |title=Java and unsigned int, unsigned short, unsigned byte, unsigned long, etc. (Or rather, the lack thereof) |first=Sean R. |last=Owens |date=2009-11-05 |work=darksleep.com |access-date=2010-10-09}}</ref>


=== Floating point arithmetic ===
=== Floating-point arithmetic ===
While Java's floating point arithmetic is largely based on [[IEEE 754]] (''Standard for Binary Floating-Point Arithmetic''), certain features are not supported even when using the <code>[[strictfp]]</code> modifier, such as Exception Flags and Directed Roundings{{snd}} capabilities mandated by IEEE Standard 754. Additionally, the extended precision floating-point types permitted in 754 and present in many processors are not permitted in Java.<ref>{{cite web |url=http://www.cs.berkeley.edu/~wkahan/JAVAhurt.pdf |title=How Java's Floating-Point Hurts Everyone Everywhere |first1=W. |last1=Kahan |first2=Joseph D. |last2=Darcy |date=1998-03-01 |access-date=2006-12-09}}</ref><ref>{{cite web |url=https://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.2.3 |title=Types, Values, and Variables |publisher=Sun Microsystems |access-date=2006-12-09}}</ref>
While Java's [[floating-point arithmetic]] is largely based on [[IEEE 754]] (''Standard for Binary Floating-Point Arithmetic''), certain features are not supported even when using the <code>[[strictfp]]</code> modifier, such as Exception Flags and Directed Roundings{{snd}} capabilities mandated by IEEE Standard 754. Additionally, the extended-precision floating-point types permitted in 754 and present in many processors are not permitted in Java.<ref>{{cite web |url=http://www.cs.berkeley.edu/~wkahan/JAVAhurt.pdf |title=How Java's Floating-Point Hurts Everyone Everywhere |first1=W. |last1=Kahan |first2=Joseph D. |last2=Darcy |date=1998-03-01 |access-date=2006-12-09}}</ref><ref>{{cite web |url=https://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.2.3 |title=Types, Values, and Variables |publisher=Sun Microsystems |access-date=2006-12-09}}</ref>


=== Performance ===
=== Performance ===
{{Further|Java performance}}
{{Further|Java performance}}


In the early days of Java (before the [[HotSpot (virtual machine)|HotSpot VM]] was implemented in Java 1.3 in 2000) there were some criticisms of performance. [[The Computer Language Benchmarks Game|Benchmarks]] typically reported Java as being about 50% slower than C (a language which compiles to native code).<ref name="debchart">[http://shootout.alioth.debian.org/u64q/which-programming-languages-are-fastest.php Which programming languages are fastest? | Computer Language Benchmarks Game<!-- Bot generated title -->] {{webarchive |url=https://web.archive.org/web/20110814034947/http://shootout.alioth.debian.org/u64q/which-programming-languages-are-fastest.php |date=August 14, 2011 }}</ref><ref>[http://shootout.alioth.debian.org/u64q/benchmark.php?test=all&lang=javasteady&lang2=gpp speed ÷ C++ GNU g++ speed | Computer Language Benchmarks Game<!-- Bot generated title -->] {{webarchive |url=https://web.archive.org/web/20110926210432/http://shootout.alioth.debian.org/u64q/benchmark.php?test=all&lang=javasteady&lang2=gpp |date=September 26, 2011 }}</ref><ref>{{cite web|url=http://blog.cfelde.com/2010/06/c-vs-java-performance/ |title=C++ vs Java performance; It's a tie! &#124; Blog of Christian Felde |date=June 27, 2010 |publisher=Blog.cfelde.com |access-date=2016-02-09}}</ref>
In the early days of Java (before the [[HotSpot (virtual machine)|HotSpot VM]] was implemented in Java 1.3 in 2000) there were some criticisms of performance. [[The Computer Language Benchmarks Game|Benchmarks]] typically reported Java as being about 50% slower than C (a language which compiles to native code).<ref name="debchart">{{cite web|url=http://shootout.alioth.debian.org/u64q/which-programming-languages-are-fastest.php |title=Which programming languages are fastest? |website=Computer Language Benchmarks Game |archiveurl=https://web.archive.org/web/20110814034947/http://shootout.alioth.debian.org/u64q/which-programming-languages-are-fastest.php |archivedate=August 14, 2011 }}</ref><ref>{{cite web|url=http://shootout.alioth.debian.org/u64q/benchmark.php?test=all&lang=javasteady&lang2=gpp |title=speed ÷ C++ GNU g++ speed |website=Computer Language Benchmarks Game |archiveurl=https://web.archive.org/web/20110926210432/http://shootout.alioth.debian.org/u64q/benchmark.php?test=all&lang=javasteady&lang2=gpp |archivedate=September 26, 2011 }}</ref><ref>{{cite web|url=http://blog.cfelde.com/2010/06/c-vs-java-performance/ |title=C++ vs Java performance; It's a tie! &#124; Blog of Christian Felde |date=June 27, 2010 |publisher=Blog.cfelde.com |access-date=2016-02-09}}</ref>


[[Java performance|Java's performance]] has improved substantially since the early versions.<ref name="LewisNeumann">{{cite web|url=http://scribblethink.org/Computer/javaCbenchmark.html|title=Performance of Java versus C++|first1=J. P. |last1=Lewis |first2=Ulrich |last2=Neumann |publisher=Graphics and Immersive Technology Lab, [[University of Southern California]] }}</ref> Performance of [[JIT compiler]]s relative to native compilers has in some optimized tests been shown to be quite similar.<ref name="LewisNeumann" /><ref name=":0">{{cite web|url=http://www.kano.net/javabench/ |title=The Java Faster than C++ Benchmark |publisher=Kano.net |date=2003-11-14 |access-date=2016-02-09}}</ref><ref name=":1">[http://research.sun.com/techrep/2002/smli_tr-2002-114.pdf FreeTTS – A Performance Case Study] {{webarchive|url=https://web.archive.org/web/20090325195557/http://research.sun.com/techrep/2002/smli_tr-2002-114.pdf |date=2009-03-25}}, Willie Walker, Paul Lamere, Philip Kwok</ref>
[[Java performance|Java's performance]] has improved substantially since the early versions.<ref name="LewisNeumann">{{cite web|url=http://scribblethink.org/Computer/javaCbenchmark.html|title=Performance of Java versus C++|first1=J. P. |last1=Lewis |first2=Ulrich |last2=Neumann |publisher=Graphics and Immersive Technology Lab, [[University of Southern California]] }}</ref> Performance of [[JIT compiler]]s relative to native compilers has in some optimized tests been shown to be quite similar.<ref name="LewisNeumann" /><ref name=":0">{{cite web|url=http://www.kano.net/javabench/ |title=The Java Faster than C++ Benchmark |publisher=Kano.net |date=2003-11-14 |access-date=2016-02-09}}</ref><ref name=":1">[http://research.sun.com/techrep/2002/smli_tr-2002-114.pdf FreeTTS – A Performance Case Study] {{webarchive|url=https://web.archive.org/web/20090325195557/http://research.sun.com/techrep/2002/smli_tr-2002-114.pdf |date=2009-03-25}}, Willie Walker, Paul Lamere, Philip Kwok</ref>
Line 426: Line 390:
On August 31, 2012, Java&nbsp;6 and 7 (both supported back then) on Microsoft Windows, [[macOS|OS X]], and Linux were found to have a serious security flaw that allowed a [[Exploit (computer security)|remote exploit]] to take place by simply loading a malicious web page.<ref>{{cite web |last=Horowitz |first=Michael |url=http://blogs.computerworld.com/cybercrime-and-hacking/20921/java-security-flaw-yada-yada-yada |title=Java security flaw: yada yada yada &#124; Computerworld |publisher=Blogs.computerworld.com |date=2012-08-31 |access-date=2016-02-09 |url-status=dead |archive-url=https://web.archive.org/web/20140724212538/http://blogs.computerworld.com/cybercrime-and-hacking/20921/java-security-flaw-yada-yada-yada |archive-date=2014-07-24 }}</ref> {{nowrap|Java 5}} was later found to be flawed as well.<ref>{{cite web |last=Brook |first=Chris |url=http://threatpost.com/en_us/blogs/new-zero-day-vulnerability-found-java-5-6-and-7-11-billion-desktops-affected-092612 |title=The first stop for security news |publisher=Threatpost |access-date=2016-02-09 |url-status=dead |archive-url=https://web.archive.org/web/20130308043441/http://threatpost.com/en_us/blogs/new-zero-day-vulnerability-found-java-5-6-and-7-11-billion-desktops-affected-092612 |archive-date=2013-03-08 }}</ref>
On August 31, 2012, Java&nbsp;6 and 7 (both supported back then) on Microsoft Windows, [[macOS|OS X]], and Linux were found to have a serious security flaw that allowed a [[Exploit (computer security)|remote exploit]] to take place by simply loading a malicious web page.<ref>{{cite web |last=Horowitz |first=Michael |url=http://blogs.computerworld.com/cybercrime-and-hacking/20921/java-security-flaw-yada-yada-yada |title=Java security flaw: yada yada yada &#124; Computerworld |publisher=Blogs.computerworld.com |date=2012-08-31 |access-date=2016-02-09 |url-status=dead |archive-url=https://web.archive.org/web/20140724212538/http://blogs.computerworld.com/cybercrime-and-hacking/20921/java-security-flaw-yada-yada-yada |archive-date=2014-07-24 }}</ref> {{nowrap|Java 5}} was later found to be flawed as well.<ref>{{cite web |last=Brook |first=Chris |url=http://threatpost.com/en_us/blogs/new-zero-day-vulnerability-found-java-5-6-and-7-11-billion-desktops-affected-092612 |title=The first stop for security news |publisher=Threatpost |access-date=2016-02-09 |url-status=dead |archive-url=https://web.archive.org/web/20130308043441/http://threatpost.com/en_us/blogs/new-zero-day-vulnerability-found-java-5-6-and-7-11-billion-desktops-affected-092612 |archive-date=2013-03-08 }}</ref>


On January 10, 2013, three computer specialists spoke out against Java, telling [[Reuters]] that it was not secure and that people should disable Java. Jaime Blasco, Labs Manager with AlienVault Labs, stated that "Java is a mess. It's not secure. You have to disable it."<ref>{{cite web|url=http://www.nbcnews.com/id/50438206/ns/technology_and_science-innovation/t/why-how-disable-java-your-computer-now#.UhJ652RrMdg |title=Why and How to Disable Java on Your Computer Now - Technology & science - Innovation |publisher=NBC News |date=2013-01-12 |access-date=2016-02-09}}</ref>
On January 10, 2013, three computer specialists spoke out against Java, telling [[Reuters]] that it was not secure and that people should disable Java. Jaime Blasco, Labs Manager with AlienVault Labs, stated that "Java is a mess. It's not secure. You have to disable it."<ref>{{cite web|url=http://www.nbcnews.com/id/50438206/ns/technology_and_science-innovation/t/why-how-disable-java-your-computer-now#.UhJ652RrMdg |archive-url=https://web.archive.org/web/20140221164010/http://www.nbcnews.com/id/50438206/ns/technology_and_science-innovation/t/why-how-disable-java-your-computer-now#.UhJ652RrMdg |url-status=dead |archive-date=February 21, 2014 |title=Why and How to Disable Java on Your Computer Now - Technology & science - Innovation |publisher=NBC News |date=2013-01-12 |access-date=2016-02-09}}</ref>
This vulnerability affects {{nowrap|Java 7}} and it is unclear if it affects {{nowrap|Java 6}}, so it is suggested that consumers disable it.<ref>{{cite web |url=https://www.forbes.com/sites/eliseackerman/2013/01/11/us-department-of-homeland-security-calls-on-computer-users-to-disable-java/ |title=US Department of Homeland Security Calls On Computer Users To Disable Java |work=Forbes.com |access-date=2016-02-09 }}</ref><ref>{{cite web |last=Brook |first=Chris |url=http://threatpost.com/en_us/blogs/nasty-new-java-zero-day-found-exploit-kits-already-have-it-011013 |title=The first stop for security news |publisher=Threatpost |access-date=2016-02-09 |url-status=dead |archive-url=https://web.archive.org/web/20130409083307/http://threatpost.com/en_us/blogs/nasty-new-java-zero-day-found-exploit-kits-already-have-it-011013 |archive-date=2013-04-09 }}</ref> Security alerts from Oracle announce schedules of critical security-related patches to Java.<ref>{{cite web|url=https://www.oracle.com/technetwork/topics/security/alerts-086861.html |title=Critical Patch Updates and Security Alerts |publisher=Oracle.com |access-date=2016-02-09}}</ref>
This vulnerability affects {{nowrap|Java 7}} and it is unclear if it affects {{nowrap|Java 6}}, so it is suggested that consumers disable it.<ref>{{cite web |url=https://www.forbes.com/sites/eliseackerman/2013/01/11/us-department-of-homeland-security-calls-on-computer-users-to-disable-java/ |title=US Department of Homeland Security Calls On Computer Users To Disable Java |work=Forbes.com |access-date=2016-02-09 }}</ref><ref>{{cite web |last=Brook |first=Chris |url=http://threatpost.com/en_us/blogs/nasty-new-java-zero-day-found-exploit-kits-already-have-it-011013 |title=The first stop for security news |publisher=Threatpost |access-date=2016-02-09 |url-status=dead |archive-url=https://web.archive.org/web/20130409083307/http://threatpost.com/en_us/blogs/nasty-new-java-zero-day-found-exploit-kits-already-have-it-011013 |archive-date=2013-04-09 }}</ref> Security alerts from Oracle announce schedules of critical security-related patches to Java.<ref>{{cite web|url=https://www.oracle.com/technetwork/topics/security/alerts-086861.html |title=Critical Patch Updates and Security Alerts |publisher=Oracle.com |access-date=2016-02-09}}</ref>


On January 14, 2013, security experts said that the update still failed to protect PCs from attack.<ref>{{cite web|first=Jim |last=Finkle |url=http://www.independent.ie/business/technology/emergency-patch-for-java-fails-to-fix-cybercrime-holes-warn-experts-3351321.html |title=Emergency patch for Java fails to fix cybercrime holes, warn experts |publisher=Independent.ie |date=2013-01-14 |access-date=2016-02-09}}</ref> This exploit hole prompted a response from the [[United States Department of Homeland Security]] encouraging users to disable or uninstall Java.<ref name="Homeland Security">{{cite web|last=Whittaker |first=Zack |url=http://www.zdnet.com/homeland-security-warns-to-disable-java-amid-zero-day-flaw-7000009713/ |title=Homeland Security warns to disable Java amid zero-day flaw |publisher=ZDNet |date=2013-01-11 |access-date=2016-02-09}}</ref> Apple blacklisted Java in limited order for all computers running its [[macOS|OS X]] operating system through a virus protection program.<ref>{{cite web |first=Meghan |last=Kelly |date=2013-01-14<!-- 3:26 PM --> |url=https://venturebeat.com/2013/01/14/java-fix-issued/ |title=Oracle issues fix for Java exploit after DHS warns of its holes |publisher=VentureBeat |access-date=2016-02-09 }}</ref>
On January 14, 2013, security experts said that the update still failed to protect PCs from attack.<ref>{{cite web|first=Jim |last=Finkle |url=http://www.independent.ie/business/technology/emergency-patch-for-java-fails-to-fix-cybercrime-holes-warn-experts-3351321.html |title=Emergency patch for Java fails to fix cybercrime holes, warn experts |publisher=Independent.ie |date=2013-01-14 |access-date=2016-02-09}}</ref> This exploit hole prompted a response from the [[United States Department of Homeland Security]] encouraging users to disable or uninstall Java.<ref name="Homeland Security">{{cite web|last=Whittaker |first=Zack |url=https://www.zdnet.com/article/homeland-security-warns-to-disable-java-amid-zero-day-flaw/ |title=Homeland Security warns to disable Java amid zero-day flaw |publisher=ZDNet |date=2013-01-11 |access-date=2016-02-09}}</ref> Apple blacklisted Java in limited order for all computers running its [[macOS|OS X]] operating system through a virus protection program.<ref>{{cite web |first=Meghan |last=Kelly |date=2013-01-14<!-- 3:26 PM --> |url=https://venturebeat.com/2013/01/14/java-fix-issued/ |title=Oracle issues fix for Java exploit after DHS warns of its holes |publisher=VentureBeat |access-date=2016-02-09 }}</ref>


In 2014 and responding to then-recent Java security and vulnerability issues, security blogger [[Brian Krebs]] has called for users to remove at least the Java browser plugin and also the entire software. "I look forward to a world without the Java plugin (and to not having to remind readers about quarterly patch updates) but it will probably be years before various versions of this plugin are mostly removed from end-user systems worldwide."<ref>{{cite web|last1=Krebs|first1=Brian|title=Good Riddance to Oracle's Java Plugin|url=http://krebsonsecurity.com/2016/02/good-riddance-to-oracles-java-plugin/|website=KrebsOnSecurity|date=16 February 2016}}</ref> "Once promising, it has outlived its usefulness in the browser, and has become a nightmare that delights cyber-criminals at the expense of computer users."<ref>{{cite web|last1=Gonsalves|first1=Antone|title=Java Is No Longer Needed. Pull The Plug-In|url=http://readwrite.com/2012/09/05/java-is-no-longer-needed-pull-the-plug-in|website=ReadWrite|publisher=Wearable World|date=5 September 2012}}</ref> "I think everyone should uninstall Java from all their PCs and Macs, and then think carefully about whether they need to add it back. If you are a typical home user, you can probably do without it. If you are a business user, you may not have a choice."<ref>{{cite web|title=Java: should you remove it?|url=https://www.theguardian.com/technology/askjack/2013/feb/08/java-remove-ask-jack-technology|website=[[The Guardian]]|date=8 February 2013}}</ref>
In 2014 and responding to then-recent Java security and vulnerability issues, security blogger [[Brian Krebs]] has called for users to remove at least the Java browser plugin and also the entire software. "I look forward to a world without the Java plugin (and to not having to remind readers about quarterly patch updates) but it will probably be years before various versions of this plugin are mostly removed from end-user systems worldwide."<ref>{{cite web|last1=Krebs|first1=Brian|title=Good Riddance to Oracle's Java Plugin|url=http://krebsonsecurity.com/2016/02/good-riddance-to-oracles-java-plugin/|website=KrebsOnSecurity|date=16 February 2016}}</ref> "Once promising, it has outlived its usefulness in the browser, and has become a nightmare that delights cyber-criminals at the expense of computer users."<ref>{{cite web|last1=Gonsalves|first1=Antone|title=Java Is No Longer Needed. Pull The Plug-In|url=http://readwrite.com/2012/09/05/java-is-no-longer-needed-pull-the-plug-in|website=ReadWrite|publisher=Wearable World|date=5 September 2012}}</ref> "I think everyone should uninstall Java from all their PCs and Macs, and then think carefully about whether they need to add it back. If you are a typical home user, you can probably do without it. If you are a business user, you may not have a choice."<ref>{{cite web|title=Java: should you remove it?|url=https://www.theguardian.com/technology/askjack/2013/feb/08/java-remove-ask-jack-technology|website=[[The Guardian]]|date=8 February 2013}}</ref>


=== Adware ===
=== Adware ===
The Oracle-distributed Java runtime environment has a history of bundling sponsored software to be installed by default during installation and during the updates which roll out every month or so. This includes the "[[Ask.com#Ask Toolbar controversy|Ask.com toolbar]]" that will redirect browser searches to ads and "McAfee Security Scan Plus".<ref name="foistware">{{cite web |last1=Bott |first1=Ed |title=A close look at how Oracle installs deceptive software with Java updates |url=http://www.zdnet.com/article/a-close-look-at-how-oracle-installs-deceptive-software-with-java-updates/ |website=ZDNet.com |publisher=ZDNet |access-date=2014-12-14 }}</ref> These offers can be blocked through a setting in the Java Control Panel, although this is not obvious. This setting is located under the "Advanced" tab in the Java Control Panel, under the "Miscellaneous" heading, where the option is labelled as an option to suppress "sponsor offers".
The Oracle-distributed Java runtime environment has a history of bundling sponsored software to be installed by default during installation and during the updates which roll out every month or so. This includes the "[[Ask.com#Ask Toolbar controversy|Ask.com toolbar]]" that will redirect browser searches to ads and "McAfee Security Scan Plus".<ref name="foistware">{{cite web |last1=Bott |first1=Ed |title=A close look at how Oracle installs deceptive software with Java updates |url=https://www.zdnet.com/article/a-close-look-at-how-oracle-installs-deceptive-software-with-java-updates/ |website=ZDNet.com |publisher=ZDNet |access-date=2014-12-14 }}</ref> These offers can be blocked through a setting in the Java Control Panel, although this is not obvious. This setting is located under the "Advanced" tab in the Java Control Panel, under the "Miscellaneous" heading, where the option is labelled as an option to suppress "sponsor offers".


=== Update system ===
=== Update system ===
Line 441: Line 405:
== See also ==
== See also ==
{{Portal|Computer programming}}
{{Portal|Computer programming}}

* [[List of Java APIs]]
* [[List of Java APIs]]
* [[Java logging framework]]
* [[Java logging framework]]
Line 448: Line 411:
* [[Jazelle]]
* [[Jazelle]]
* [[Java ConcurrentMap]]
* [[Java ConcurrentMap]]
* [[Comparison of the Java and .NET platforms]]
* [[List of JVM languages]]
* [[List of JVM languages]]
* [[List of computing mascots]]
* [[List of computing mascots]]
Line 461: Line 423:
{{Spoken Wikipedia|En-Java (software platform).ogg|date=2013-08-19}}
{{Spoken Wikipedia|En-Java (software platform).ogg|date=2013-08-19}}
* {{cite web |url = https://www.infoq.com/presentations/gosling-jvm-lang-summit-keynote |title = How The JVM Spec Came To Be |website = infoq.com }}{{snd}} Presentation by [[James Gosling]] about the origins of Java, from the JVM Languages Summit 2008
* {{cite web |url = https://www.infoq.com/presentations/gosling-jvm-lang-summit-keynote |title = How The JVM Spec Came To Be |website = infoq.com }}{{snd}} Presentation by [[James Gosling]] about the origins of Java, from the JVM Languages Summit 2008
* [http://www.java-forums.org/forum.php Java forums organization]{{Dead link|date=March 2023 |bot=InternetArchiveBot |fix-attempted=yes }}
* [https://web.archive.org/web/20110522182526/http://www.java-forums.org/forum.php Java forums organization]
* [https://javatopics77.blogspot.com/ Java Introduction], May 14, 2014, Java77 Blog
* [https://javatopics77.blogspot.com/ Java Introduction], May 14, 2014, Java77 Blog



Latest revision as of 06:06, 9 November 2024

Java (software platform)
Original author(s)James Gosling, Sun Microsystems
Developer(s)Oracle Corporation
Initial releaseJanuary 23, 1996; 28 years ago (1996-01-23)[1][2]
Stable release23.0.1 (October 15, 2024; 40 days ago (2024-10-15)[3]) [±]

21.0.5 LTS (October 15, 2024; 40 days ago (2024-10-15)[4]) [±]
17.0.13 LTS (October 15, 2024; 40 days ago (2024-10-15)[5]) [±]
11.0.25 LTS (October 15, 2024; 40 days ago (2024-10-15)[6]) [±]

8u431 LTS (October 15, 2024; 40 days ago (2024-10-15)[7]) [±]
Written inJava, C++, C, assembly language[8]
Operating systemMicrosoft Windows, Linux, macOS,[9] and for old versions: Solaris
Platformx64, ARMv8, and for old versions: ARMv7, IA-32, SPARC (up to Java 14) (Java 8 includes 32-bit support for Windows – while no longer supported freely by Oracle for commercial use)[9]
Available inEnglish, Chinese, French, German, Italian, Japanese, Korean, Portuguese, Spanish, Swedish[10]
TypeSoftware platform
LicenseDual-license: GNU General Public License version 2 with classpath exception,[11] and a proprietary license.[12]
Website
TuxGuitar, a Java-powered program

Java is a set of computer software and specifications that provides a software platform for developing application software and deploying it in a cross-platform computing environment. Java is used in a wide variety of computing platforms from embedded devices and mobile phones to enterprise servers and supercomputers. Java applets, which are less common than standalone Java applications, were commonly run in secure, sandboxed environments to provide many features of native applications through being embedded in HTML pages.

Writing in the Java programming language is the primary way to produce code that will be deployed as byte code in a Java virtual machine (JVM); byte code compilers are also available for other languages, including Ada, JavaScript, Kotlin (Google's preferred Android language), Python, and Ruby. In addition, several languages have been designed to run natively on the JVM, including Clojure, Groovy, and Scala. Java syntax borrows heavily from C and C++, but object-oriented features are modeled after Smalltalk and Objective-C.[13] Java eschews certain low-level constructs such as pointers and has a very simple memory model where objects are allocated on the heap (while some implementations e.g. all currently supported by Oracle, may use escape analysis optimization to allocate on the stack instead) and all variables of object types are references. Memory management is handled through integrated automatic garbage collection performed by the JVM.

Latest version

[edit]

The latest version is Java 22 released in March 2024, and the latest long-term support (LTS) version is Java 21 released in September 2023, which is one of a few LTS versions still supported, down to Java 8 LTS. As an open source platform, Java has many distributors, including Amazon, IBM, Azul Systems, and AdoptOpenJDK. Distributions include Amazon Corretto, Zulu, AdoptOpenJDK, and Liberica. Regarding Oracle, it distributes Java 8, and also makes available e.g. Java 11, both also currently supported LTS versions. Oracle (and others) "highly recommend that you uninstall older versions of Java" than Java 8,[14] because of serious risks due to unresolved security issues.[15][16][17] Since Java 9 (as well as versions 10, and 12–16, and 18–20) are no longer supported, Oracle advises its users to "immediately transition" to a supported version. Oracle released the last free-for-commercial-use public update for the legacy Java 8 LTS in January 2019, and will continue to support Java 8 with public updates for personal use indefinitely. Oracle extended support for Java 6 ended in December 2018.[18]

Platform

[edit]

The Java platform is a suite of programs that facilitate developing and running programs written in the Java programming language. A Java platform includes an execution engine (called a virtual machine), a compiler and a set of libraries; there may also be additional servers and alternative libraries that depend on the requirements. Java platforms have been implemented for a wide variety of hardware and operating systems with a view to enable Java programs to run identically on all of them.

The Java platform consists of several programs, each of which provides a portion of its overall capabilities. For example, the Java compiler, which converts Java source code into Java bytecode (an intermediate language for the JVM), is provided as part of the Java Development Kit (JDK). The Java Runtime Environment (JRE), complementing the JVM with a just-in-time (JIT) compiler, converts intermediate bytecode into native machine code on the fly. The Java platform also includes an extensive set of libraries.

The essential components in the platform are the Java language compiler, the libraries, and the runtime environment in which Java intermediate bytecode executes according to the rules laid out in the virtual machine specification.

Application domains

[edit]

Different platforms target different classes of device and application domains:

  • Java Card: A technology that allows small Java-based applications (applets) to be run securely on smart cards and similar small-memory devices.
  • Java ME (Micro Edition): Specifies several different sets of libraries (known as profiles) for devices with limited storage, display, and power capacities. It is often used to develop applications for mobile devices, PDAs, TV set-top boxes, and printers.
  • Java SE (Standard Edition): For general-purpose use on desktop PCs, servers and similar devices.
  • Jakarta EE (Enterprise Edition): Java SE plus various APIs which are useful for multi-tier client–server enterprise applications.

Java SE

[edit]

Java Platform, Standard Edition (Java SE) is a computing platform for development and deployment of portable code for desktop and server environments.[19] Java SE was formerly known as Java 2 Platform, Standard Edition (J2SE).

The platform uses the Java programming language and is part of the Java software-platform family. Java SE defines a range of general-purpose APIs—such as Java APIs for the Java Class Library—and also includes the Java Language Specification and the Java Virtual Machine Specification.[20] OpenJDK is the official reference implementation since version 7.[21][22][23]

Jakarta EE

[edit]
Jakarta EE, formerly Java Platform, Enterprise Edition (Java EE) and Java 2 Platform, Enterprise Edition (J2EE), is a set of specifications, extending Java SE[24] with specifications for enterprise features such as distributed computing and web services.[25] Jakarta EE applications are run on reference runtimes, which can be microservices or application servers, which handle transactions, security, scalability, concurrency and management of the components they are deploying.

Java virtual machine

[edit]

The heart of the Java platform is the "virtual machine" that executes Java bytecode programs. This bytecode is the same no matter what hardware or operating system the program is running under. However, new versions, such as for Java 10 (and earlier), have made small changes, meaning the bytecode is in general only forward compatible. There is a JIT (Just In Time) compiler within the Java Virtual Machine, or JVM. The JIT compiler translates the Java bytecode into native processor instructions at run-time and caches the native code in memory during execution.

The use of bytecode as an intermediate language permits Java programs to run on any platform that has a virtual machine available. The use of a JIT compiler means that Java applications, after a short delay during loading and once they have "warmed up" by being all or mostly JIT-compiled, tend to run about as fast as native programs.[26][27][28] Since JRE version 1.2, Sun's JVM implementation has included a just-in-time compiler instead of an interpreter.

Although Java programs are cross-platform or platform independent, the code of the Java Virtual Machines (JVM) that execute these programs is not. Every supported operating platform has its own JVM.

Java Development Kit

[edit]

The Java Development Kit (JDK) is a distribution of Java technology by Oracle Corporation. It implements the Java Language Specification (JLS) and the Java Virtual Machine Specification (JVMS) and provides the Standard Edition (SE) of the Java Application Programming Interface (API). It is derivative of the community driven OpenJDK which Oracle stewards.[29] It provides software for working with Java applications. Examples of included software are the Java virtual machine, a compiler, performance monitoring tools, a debugger, and other utilities that Oracle considers useful for Java programmers.

Oracle releases the current version of the software under the Oracle No-Fee Terms and Conditions (NFTC) license. Oracle releases binaries for the x86-64 architecture for Windows, macOS, and Linux based operating systems, and for the aarch64 architecture for macOS and Linux. Previous versions supported the Oracle Solaris operating system and SPARC architecture.

Oracle's primary implementation of the JVMS is known as the HotSpot (virtual machine).

Java Runtime Environment

[edit]

The Java Runtime Environment (JRE) released by Oracle is a freely available software distribution containing a stand-alone JVM (HotSpot), the Java standard library (Java Class Library), a configuration tool, and—until its discontinuation in JDK 9—a browser plug-in. It is the most common Java environment installed on personal computers in the laptop and desktop form factor. Mobile phones including feature phones and early smartphones that ship with a JVM are most likely to include a JVM meant to run applications targeting Micro Edition of the Java platform. Meanwhile, most modern smartphones, tablet computers, and other handheld PCs that run Java apps are most likely to do so through support of the Android operating system, which includes an open source virtual machine incompatible with the JVM specification. (Instead, Google's Android development tools take Java programs as input and output Dalvik bytecode, which is the native input format for the virtual machine on Android devices.) The last Critical Path Update version of JRE with an Oracle BCL Agreement[30] was 8u201 and, the last Patch Set Update version with the same license was 8u202.[31][32] The last Oracle JRE implementation, regardless of its licensing scheme, was 9.0.4.[33] Since Java Platform SE 9, the whole platform also was grouped into modules.[34] The modularization of Java SE implementations allows developers to bundle their applications together with all the modules used by them, instead of solely relying on the presence of a suitable Java SE implementation in the user device.[35][36][37][38]

Class libraries

[edit]

In most modern operating systems (OSs), a large body of reusable code is provided to simplify the programmer's job. This code is typically provided as a set of dynamically loadable libraries that applications can call at runtime. Because the Java platform is not dependent on any specific operating system, applications cannot rely on any of the pre-existing OS libraries. Instead, the Java platform provides a comprehensive set of its own standard class libraries containing many of the same reusable functions commonly found in modern operating systems. Most of the system library is also written in Java. For instance, the Swing library paints the user interface and handles the events itself, eliminating many subtle differences between how different platforms handle components.

The Java class libraries serve three purposes within the Java platform. First, like other standard code libraries, the Java libraries provide the programmer a well-known set of functions to perform common tasks, such as maintaining lists of items or performing complex string parsing. Second, the class libraries provide an abstract interface to tasks that would normally depend heavily on the hardware and operating system. Tasks such as network access and file access are often heavily intertwined with the distinctive implementations of each platform. The java.net and java.io libraries implement an abstraction layer in native OS code, then provide a standard interface for the Java applications to perform those tasks. Finally, when some underlying platform does not support all of the features a Java application expects, the class libraries work to gracefully handle the absent components, either by emulation to provide a substitute, or at least by providing a consistent way to check for the presence of a specific feature.

Languages

[edit]

The word "Java", alone, usually refers to Java programming language that was designed for use with the Java platform. Programming languages are typically outside of the scope of the phrase "platform", although the Java programming language was listed as a core part of the Java platform before Java 7. The language and runtime were therefore commonly considered a single unit. However, an effort was made with the Java 7 specification to more clearly treat the Java language and the Java Virtual Machine as separate entities, so that they are no longer considered a single unit.[39]

Third parties have produced many compilers or interpreters that target the JVM. Some of these are for existing languages, while others are for extensions to the Java language. These include:

  • BeanShell – a lightweight scripting language for Java[40] (see also JShell)
  • Ceylon – an object-oriented, strongly- and statically-typed programming language with an emphasis on immutability (and is no longer maintained since 2023)
  • Clojure – a modern, dynamic, and functional dialect of the Lisp programming language on the Java platform
  • Gosu – a general-purpose JVM-based programming language released under the Apache License 2.0
  • Groovy – a fully Java-interoperable, Java-syntax-compatible, static and dynamic language with features from Python, Ruby, Perl, and Smalltalk
  • JRuby – a Ruby interpreter
  • Jython – a Python interpreter
  • Kotlin – a programming language for a JVM (and non-JVM, for e.g. desktop and iOS) with full Java interoperability (Google's preferred language for Android, its JVM, over Java, which is also still supported there and it previously promoted)
  • Rhino – a JavaScript interpreter
  • Scala – a multi-paradigm programming language with non-Java compatible syntax designed as a "better Java"

Similar platforms

[edit]

The success of Java and its write once, run anywhere concept has led to other similar efforts, notably the .NET Framework, appearing since 2002, which incorporates many of the successful aspects of Java. .NET was built from the ground-up to support multiple programming languages, while the Java platform was initially built to support only the Java language, although many other languages have been made for JVM since. Like Java, .NET languages compile to byte code and are executed by the Common Language Runtime (CLR), which is similar in purpose to the JVM. Like the JVM, the CLR provides memory management through automatic garbage collection, and allows .NET byte code to run on multiple operating systems.

.NET included a Java-like language first named J++, then called Visual J# that was incompatible with the Java specification. It was discontinued 2007, and support for it ended in 2015.

Performance

[edit]

The JVM specification gives a lot of leeway to implementors regarding the implementation details. Since Java 1.3, JRE from Oracle contains a JVM called HotSpot. It has been designed to be a high-performance JVM.

To speed-up code execution, HotSpot relies on just-in-time compilation. To speed-up object allocation and garbage collection, HotSpot uses generational heap.

Generational heap

[edit]

The Java virtual machine heap is the area of memory used by the JVM for dynamic memory allocation.[41]

In HotSpot the heap is divided into generations:

  • The young generation stores short-lived objects that are created and immediately garbage collected.
  • Objects that persist longer are moved to the old generation (also called the tenured generation). This memory is subdivided into (two) Survivors spaces where the objects that survived the first and next garbage collections are stored.

The permanent generation (or permgen) was used for class definitions and associated metadata prior to Java 8. Permanent generation was not part of the heap.[42][43] The permanent generation was removed from Java 8.[44]

Originally there was no permanent generation, and objects and classes were stored together in the same area. But as class unloading occurs much more rarely than objects are collected, moving class structures to a specific area allowed significant performance improvements.[42]

Security

[edit]

The Java JRE is installed on a large number of computers. End users with an out-of-date version of JRE therefore are vulnerable to many known attacks. This led to the widely shared belief that Java is inherently insecure.[45] Since Java 1.7, Oracle's JRE for Windows includes automatic update functionality.

Before the discontinuation of the Java browser plug-in, any web page might have potentially run a Java applet, which provided an easily accessible attack surface to malicious web sites. In 2013 Kaspersky Labs reported that the Java plug-in was the method of choice for computer criminals. Java exploits are included in many exploit packs that hackers deploy onto hacked web sites.[46] Java applets were removed in Java 11, released on September 25, 2018.

Java versions

[edit]
Java
version
Year Changes
23 2024
21 2023 A Long-Term Support (LTS) release
17 2021 An LTS release, has several enhancements, provides pattern matching for switch statements and sealed classes
16 2021 Introduced record classes, pattern matching, and sealed classes for enhanced data modelling abilities
15 2020 Introduced text blocks, sealed classes as preview features, enhancing string and class handling
14 2020 Introduced new features record classes and pattern matching for instanceof as preview features
13 2019 Included enhancements, text blocks, reimplementation of legacy Socket API
12 2019 Introduced switch expressions, new Shenandoah garbage collector
11 2018 An LTS release, introduced new HTTP Client, removed Java EE and CORBA modules
10 2018 Introduced Local-Variable Type Inference (var), allows declaring local variables without specifying type
9 2017 Introduced Java Platform Module System (JPMS) for modularizing applications, JShell interactive Java REPL
8 2014 Major release, introduced Lambda Expressions, new Date and Time API for better productivity
7 2011 Introduced try-with-resources, Switch on String, Diamond Operator, included expanded exception handling, new file I/O library (NIO.2)
6 2006 Introduced Scripting Language Support (JSR 223), Web Service Enhancements, provided JDBC 4.0 with SQL XML support
5 2004 Significant release, included Generics, an Enhanced for Loop, Autoboxing/Unboxing, Static Import, Varargs, Enumerations, Annotations
4 2002 Introduced Regular Expressions, Exception Chaining, new set of I/O APIs named NIO (New Input/Output), new Logging API
3 2000 Included new Sun JVM named HotSpot, introduced Java Naming and Directory Interface (JNDI), Java Platform Debugger Architecture (JPDA)
2 1998 Introduced Collections Framework, Java String memory map for constants, a Just In Time (JIT) compiler, and Swing API for GUIs
1.1 1997 Introduced Inner Classes, Reflection, Java Beans, JDBC API for database access
1.0 1996 First version of Java programming language, introduced object-oriented programming and bytecode in Java, which made Java cross-platform

History

[edit]
James Gosling

The Java platform and language began as an internal project at Sun Microsystems in December 1990, providing an alternative to the C++/C programming languages. Engineer Patrick Naughton had become increasingly frustrated with the state of Sun's C++ and C application programming interfaces (APIs) and tools, as well as with the way the NeWS project was handled by the organization. Naughton informed Scott McNealy about his plan of leaving Sun and moving to NeXT; McNealy asked him to pretend he was God and send him an e-mail explaining how to fix the company. Naughton envisioned the creation of a small team that could work autonomously without the bureaucracy that was stalling other Sun projects. McNealy forwarded the message to other important people at Sun, and the Stealth Project started.[47]

The Stealth Project was soon renamed to the Green Project, with James Gosling and Mike Sheridan joining Naughton. Together with other engineers, they began work in a small office on Sand Hill Road in Menlo Park, California. They aimed to develop new technology for programming next-generation smart appliances, which Sun expected to offer major new opportunities.[48]

The team originally considered using C++, but rejected it for several reasons. Because they were developing an embedded system with limited resources, they decided that C++ needed too much memory and that its complexity led to developer errors. The language's lack of garbage collection meant that programmers had to manually manage system memory, a challenging and error-prone task. The team also worried about the C++ language's lack of portable facilities for security, distributed programming, and threading. Finally, they wanted a platform that would port easily to all types of devices.

Bill Joy had envisioned a new language combining Mesa and C. In a paper called Further, he proposed to Sun that its engineers should produce an object-oriented environment based on C++. Initially, Gosling attempted to modify and extend C++ (a proposed development that he referred to as "C++ ++ --") but soon abandoned that in favor of creating a new language, which he called Oak, after the tree that stood just outside his office.[49]

By the summer of 1992, the team could demonstrate portions of the new platform, including the Green OS, the Oak language, the libraries, and the hardware. Their first demonstration, on September 3, 1992, focused on building a personal digital assistant (PDA) device named Star7[1] that had a graphical interface and a smart agent called "Duke" to assist the user. In November of that year, the Green Project was spun off to become Firstperson, a wholly owned subsidiary of Sun Microsystems, and the team relocated to Palo Alto, California.[50] The Firstperson team had an interest in building highly interactive devices, and when Time Warner issued a request for proposal (RFP) for a set-top box, Firstperson changed their target and responded with a proposal for a set-top box platform. However, the cable industry felt that their platform gave too much control to the user, so Firstperson lost their bid to SGI. An additional deal with The 3DO Company for a set-top box also failed to materialize. Unable to generate interest within the television industry, the company was rolled back into Sun.

Java meets the Web

[edit]
John Gage

In June and July 1994 – after three days of brainstorming with John Gage (the Director of Science for Sun), Gosling, Joy, Naughton, Wayne Rosing, and Eric Schmidt – the team re-targeted the platform for the World Wide Web. They felt that with the advent of graphical web browsers like Mosaic the Internet could evolve into the same highly interactive medium that they had envisioned for cable TV. As a prototype, Naughton wrote a small browser, WebRunner (named after the movie Blade Runner), renamed HotJava[48] in 1995.

Sun renamed the Oak language to Java after a trademark search revealed that Oak Technology used the name Oak.[51] Sun priced Java licenses below cost to gain market share.[52] Although Java 1.0a became available for download in 1994, the first public release of Java, Java 1.0a2 with the HotJava browser, came on May 23, 1995, announced by Gage at the SunWorld conference. Accompanying Gage's announcement, Marc Andreessen, Executive Vice President of Netscape Communications Corporation, unexpectedly announced that Netscape browsers would include Java support. On January 9, 1996, Sun Microsystems formed the JavaSoft group to develop the technology.[53]

While the so-called Java applets for web browsers no longer are the most popular use of Java (with it e.g. more used server-side) or the most popular way to run code client-side (JavaScript took over as more popular), it still is possible to run Java (or other JVM languages such as Kotlin) in web browsers, even after JVM support has been dropped from them, using e.g. TeaVM.

GNU General Public License

[edit]

On November 13, 2006, Sun Microsystems made the bulk of its implementation of Java available under the GNU General Public License (GPL).[54][55]

Version history

[edit]

The Java language has undergone several changes since the release of JDK (Java Development Kit) 1.0 on January 23, 1996, as well as numerous additions of classes and packages to the standard library. Since J2SE 1.4 the Java Community Process (JCP) has governed the evolution of the Java Language. The JCP uses Java Specification Requests (JSRs) to propose and specify additions and changes to the Java platform. The Java Language Specification (JLS) specifies the language; changes to the JLS are managed under JSR 901.[56]

Sun released JDK 1.1 on February 19, 1997. Major additions included an extensive retooling of the Abstract Window Toolkit (AWT) event model, inner classes added to the language, JavaBeans, and Java Database Connectivity (JDBC).

J2SE 1.2 (December 8, 1998) – Codename Playground. This and subsequent releases through J2SE 5.0 were rebranded Java 2 and the version name "J2SE" (Java 2 Platform, Standard Edition) replaced JDK to distinguish the base platform from J2EE (Java 2 Platform, Enterprise Edition) and J2ME (Java 2 Platform, Micro Edition). Major additions included reflection, a collections framework, Java IDL (an interface description language implementation for CORBA interoperability), and the integration of the Swing graphical API into the core classes. A Java Plug-in was released, and Sun's JVM was equipped with a JIT compiler for the first time.

J2SE 1.3 (May 8, 2000) – Codename Kestrel. Notable changes included the bundling of the HotSpot JVM (the HotSpot JVM was first released in April, 1999 for the J2SE 1.2 JVM), JavaSound, Java Naming and Directory Interface (JNDI) and Java Platform Debugger Architecture (JPDA).

J2SE 1.4 (February 6, 2002) – Codename Merlin. This became the first release of the Java platform developed under the Java Community Process as JSR 59.[57] Major changes included regular expressions modeled after Perl, exception chaining, an integrated XML parser and XSLT processor (JAXP), and Java Web Start.

J2SE 5.0 (September 30, 2004) – Codename Tiger. It was originally numbered 1.5, which is still used as the internal version number.[58] Developed under JSR 176, Tiger added several significant new language features including the for-each loop, generics, autoboxing and var-args.[59]

Java SE 6 (December 11, 2006) – Codename Mustang. It was bundled with a database manager and facilitates the use of scripting languages with the JVM (such as JavaScript using Mozilla's Rhino engine). As of this version, Sun replaced the name "J2SE" with Java SE and dropped the ".0" from the version number.[60] Other major changes include support for pluggable annotations (JSR 269), many GUI improvements, including native UI enhancements to support the look and feel of Windows Vista, and improvements to the Java Platform Debugger Architecture (JPDA) & JVM Tool Interface for better monitoring and troubleshooting.

Java SE 7 (July 28, 2011) – Codename Dolphin. This version developed under JSR 336.[61] It added many small language changes including strings in switch, try-with-resources and type inference for generic instance creation. The JVM was extended with support for dynamic languages, while the class library was extended among others with a join/fork framework,[62] an improved new file I/O library and support for new network protocols such as SCTP. Java 7 Update 76 was released in January 2015, with expiration date April 14, 2015.[63]

In June 2016, after the last public update of Java 7,[64] "remotely exploitable" security bugs in Java 6, 7, and 8 were announced.[16]

Java SE 8 (March 18, 2014) – Codename Kenai. Notable changes include language-level support for lambda expressions (closures) and default methods, the Project Nashorn JavaScript runtime, a new Date and Time API inspired by Joda Time, and the removal of PermGen. This version is not officially supported on the Windows XP platform,[65] but is known to work there. Thus, due to the end of Java 7's lifecycle it is the recommended version for XP users. Previously, only an unofficial manual installation method had been described for Windows XP SP3. It refers to JDK8, the developing platform for Java that also includes a fully functioning Java Runtime Environment.[66] Java 8 is supported on Windows Server 2008 R2 SP1, Windows Vista SP2 and Windows 7 SP1, Ubuntu 12.04 LTS and higher (and some other OSes).[67]

Java SE 9 and 10 have higher system requirements, i.e. Windows 7 or Server 2012 (and web browser minimum certified is upped to Internet Explorer 11 or other web browsers), and Oracle dropped 32-bit compatibility for all platforms, i.e. only Oracle's "64-bit Java virtual machines (JVMs) are certified".[68]

Java SE 11 LTS was released September 2018, the first LTS release since the rapid release model was adopted starting with version 9. For the first time, OpenJDK 11 represents the complete source code for the Java platform under the GNU General Public License, and while Oracle still dual-licenses it with an optional proprietary license, there are no code differences nor modules unique to the proprietary-licensed version.[69] Java 11 features include two new garbage collector implementations, Flight Recorder to debug deep issues, a new HTTP client including WebSocket support.[70]

Java SE 12 was released March 2019.[71]

Java SE 13 was released September 2019.[72]

Java SE 14 was released March 2020.[73]

Java SE 15 was released September 2020.

Java SE 16 was released March 2021.

Java SE 17 LTS was released September 2021.

Java SE 18 was released March 2022.

Java SE 19 was released September 2022.

Java SE 20 was released March 2023.

Java SE 21 LTS was released September 2023.

Java SE 22 was released March 2024.

In addition to language changes, significant changes have been made to the Java class library over the years, which has grown from a few hundred classes in JDK 1.0 to over three thousand in J2SE 5.0. Entire new APIs, such as Swing and Java 2D, have evolved, and many of the original JDK 1.0 classes and methods have been deprecated (thereof some "terminally deprecated"), e.g. related to finalization.[74]

At least one very rarely-used API (for threading) has been removed from Java 22.[75][76]

Usage

[edit]

Desktop use

[edit]
A Java program running on a Windows Vista desktop (supported by Java 8, but not officially by later versions, such as Java 11) desktop computer

Current Java is supported on 64-bit Windows 10 (and Server 2016) and later, 64-bit macOS 13.x and later, and 64-bit Linux (e.g. Oracle Enterprise Linux). Others are not supported by Oracle (for building, but may be by IBM, SAP etc.), though are known to work e.g. AIX, Ubuntu, RHEL, and Alphine/musl. 32-bit Windows support is deprecated since Java 22 (and 32-bit JVM no longer builds without non-default options).

According to Oracle in 2010, the Java Runtime Environment was found on over 850 million PCs.[77] Microsoft has not bundled a Java Runtime Environment (JRE) with its operating systems since Sun Microsystems sued Microsoft for adding Windows-specific classes to the bundled Java runtime environment, and for making the new classes available through Visual J++.[citation needed] Apple no longer includes a Java runtime with OS X as of version 10.7, but the system prompts the user to download and install it the first time an application requiring the JRE is launched.[citation needed] Many Linux distributions include the OpenJDK runtime as the default virtual machine, negating the need to download the proprietary Oracle JRE.[78]

Some Java applications are in fairly widespread desktop use, including the NetBeans, Eclipse and JetBrains[79] integrated development environments, and file sharing clients such as LimeWire and Vuze. Java is also used in the MATLAB mathematics programming environment, both for rendering the user interface and as part of the core system. Java provides cross platform user interface for some high end collaborative applications such as Lotus Notes.

Oracle plans to first deprecate the separately installable Java browser plugin from the Java Runtime Environment in JDK 9 then remove it completely from a future release, forcing web developers to use an alternative technology.[80]

Mascot

[edit]
Plain ol' Duke

Duke is Java's mascot.[81]

When Sun announced that Java SE and Java ME would be released under a free software license (the GNU General Public License), they released the Duke graphics under the free BSD license at the same time.[82] A new Duke personality is created every year.[83] For example, in July 2011 "Future Tech Duke" included a bigger nose, a jetpack, and blue wings.[84]

Licensing

[edit]

The source code for Sun's implementations of Java (i.e. the de facto reference implementation) has been available for some time, but until recently,[85] the license terms severely restricted what could be done with it without signing (and generally paying for) a contract with Sun. As such these terms did not satisfy the requirements of either the Open Source Initiative or the Free Software Foundation to be considered open source or free software, and Sun Java was therefore a proprietary platform.[86]

While several third-party projects (e.g. GNU Classpath and Apache Harmony) created free software partial Java implementations, the large size of the Sun libraries combined with the use of clean room methods meant that their implementations of the Java libraries (the compiler and VM are comparatively small and well defined) were incomplete and not fully compatible. These implementations also tended to be far less optimized than Sun's.[citation needed]

Free software

[edit]
Jonathan I. Schwartz

Sun announced in JavaOne 2006 that Java would become free and open-source software,[87] and on October 25, 2006, at the Oracle OpenWorld conference, Jonathan I. Schwartz said that the company was set to announce the release of the core Java Platform as free and open source software within 30 to 60 days.[88]

Sun released the Java HotSpot virtual machine and compiler as free software under the GNU General Public License on November 13, 2006, with a promise that the rest of the JDK (that includes the JRE) would be placed under the GPL by March 2007 ("except for a few components that Sun does not have the right to publish in distributable source form under the GPL").[89] According to Richard Stallman, this would mean an end to the "Java trap".[90] Mark Shuttleworth called the initial press announcement, "A real milestone for the free software community".[91]

Sun released the source code of the Class library under GPL on May 8, 2007, except some limited parts that were licensed by Sun from third parties who did not want their code to be released under a free software and open-source license.[92] Some of the encumbered parts turned out to be fairly key parts of the platform such as font rendering and 2D rasterising, but these were released as open-source later by Sun (see OpenJDK Class library).

Sun's goal was to replace the parts that remain proprietary and closed-source with alternative implementations and make the class library completely free and open source. In the meantime, a third-party project called IcedTea created a completely free and highly usable JDK by replacing encumbered code with either stubs or code from GNU Classpath. However OpenJDK has since become buildable without the encumbered parts (from OpenJDK 6 b10[93]) and has become the default runtime environment for most Linux distributions.[94][95][96][97]

In June 2008, it was announced that IcedTea6 (as the packaged version of OpenJDK on Fedora 9) has passed the Technology Compatibility Kit tests and can claim to be a fully compatible Java 6 implementation.[98]

Because OpenJDK is under the GPL, it is possible to redistribute a custom version of the JRE directly with software applications,[99][100] rather than requiring the enduser (or their sysadmin) to download and install the correct version of the proprietary Oracle JRE onto each of their systems themselves.

Criticism

[edit]

In most cases, Java support is unnecessary in Web browsers, and security experts recommend that it not be run in a browser unless absolutely necessary.[101] It was suggested[by whom?] that, if Java is required by a few Web sites, users should have a separate browser installation specifically for those sites.[citation needed]

Generics

[edit]

When generics were added to Java 5.0, there was already a large framework of classes (many of which were already deprecated), so generics were chosen to be implemented using erasure to allow for migration compatibility and re-use of these existing classes. This limited the features that could be provided by this addition as compared to some other languages.[102][103] The addition of type wildcards made Java unsound.[104]

Unsigned integer types

[edit]

Java lacks native unsigned integer types. Unsigned data are often generated from programs written in C and the lack of these types prevents direct data interchange between C and Java. Unsigned large numbers are also used in many numeric processing fields, including cryptography, which can make Java less convenient to use for these tasks.[105] Although it is possible to partially circumvent this problem with conversion code and using larger data types, it makes using Java cumbersome for handling the unsigned data. While a 32-bit signed integer may be used to hold a 16-bit unsigned value with relative ease, a 32-bit unsigned value would require a 64-bit signed integer. Additionally, a 64-bit unsigned value cannot be stored using any integer type in Java because no type larger than 64 bits exists in the Java language. If abstracted using functions, function calls become necessary for many operations which are native to some other languages. Alternatively, it is possible to use Java's signed integers to emulate unsigned integers of the same size, but this requires detailed knowledge of complex bitwise operations.[106]

Floating-point arithmetic

[edit]

While Java's floating-point arithmetic is largely based on IEEE 754 (Standard for Binary Floating-Point Arithmetic), certain features are not supported even when using the strictfp modifier, such as Exception Flags and Directed Roundings – capabilities mandated by IEEE Standard 754. Additionally, the extended-precision floating-point types permitted in 754 and present in many processors are not permitted in Java.[107][108]

Performance

[edit]

In the early days of Java (before the HotSpot VM was implemented in Java 1.3 in 2000) there were some criticisms of performance. Benchmarks typically reported Java as being about 50% slower than C (a language which compiles to native code).[109][110][111]

Java's performance has improved substantially since the early versions.[26] Performance of JIT compilers relative to native compilers has in some optimized tests been shown to be quite similar.[26][27][28]

Java bytecode can either be interpreted at run time by a virtual machine, or it can be compiled at load time or runtime into native code which runs directly on the computer's hardware. Interpretation is slower than native execution, and compilation at load time or runtime has an initial performance penalty for the compilation. Modern performant JVM implementations all use the compilation approach, so after the initial startup time the performance is equivalent to native code.

Security

[edit]

The Java platform provides a security architecture[112] which is designed to allow the user to run untrusted bytecode in a "sandboxed" manner to protect against malicious or poorly written software. This "sandboxing" feature is intended to protect the user by restricting access to certain platform features and APIs which could be exploited by malware, such as accessing the local filesystem, running arbitrary commands, or accessing communication networks.

In recent years, researchers have discovered numerous security flaws in some widely used Java implementations, including Oracle's, which allow untrusted code to bypass the sandboxing mechanism, exposing users to malicious attacks. These flaws affect only Java applications which execute arbitrary untrusted bytecode, such as web browser plug-ins that run Java applets downloaded from public websites. Applications where the user trusts, and has full control over, all code that is being executed are unaffected.

On August 31, 2012, Java 6 and 7 (both supported back then) on Microsoft Windows, OS X, and Linux were found to have a serious security flaw that allowed a remote exploit to take place by simply loading a malicious web page.[113] Java 5 was later found to be flawed as well.[114]

On January 10, 2013, three computer specialists spoke out against Java, telling Reuters that it was not secure and that people should disable Java. Jaime Blasco, Labs Manager with AlienVault Labs, stated that "Java is a mess. It's not secure. You have to disable it."[115] This vulnerability affects Java 7 and it is unclear if it affects Java 6, so it is suggested that consumers disable it.[116][117] Security alerts from Oracle announce schedules of critical security-related patches to Java.[118]

On January 14, 2013, security experts said that the update still failed to protect PCs from attack.[119] This exploit hole prompted a response from the United States Department of Homeland Security encouraging users to disable or uninstall Java.[17] Apple blacklisted Java in limited order for all computers running its OS X operating system through a virus protection program.[120]

In 2014 and responding to then-recent Java security and vulnerability issues, security blogger Brian Krebs has called for users to remove at least the Java browser plugin and also the entire software. "I look forward to a world without the Java plugin (and to not having to remind readers about quarterly patch updates) but it will probably be years before various versions of this plugin are mostly removed from end-user systems worldwide."[121] "Once promising, it has outlived its usefulness in the browser, and has become a nightmare that delights cyber-criminals at the expense of computer users."[122] "I think everyone should uninstall Java from all their PCs and Macs, and then think carefully about whether they need to add it back. If you are a typical home user, you can probably do without it. If you are a business user, you may not have a choice."[123]

Adware

[edit]

The Oracle-distributed Java runtime environment has a history of bundling sponsored software to be installed by default during installation and during the updates which roll out every month or so. This includes the "Ask.com toolbar" that will redirect browser searches to ads and "McAfee Security Scan Plus".[124] These offers can be blocked through a setting in the Java Control Panel, although this is not obvious. This setting is located under the "Advanced" tab in the Java Control Panel, under the "Miscellaneous" heading, where the option is labelled as an option to suppress "sponsor offers".

Update system

[edit]

Java has yet to release an automatic updater that does not require user intervention and administrative rights[125] unlike Google Chrome[126] and Flash player.[127]

See also

[edit]

References

[edit]
  1. ^ "JavaSoft ships Java 1.0" (Press release). Archived from the original on February 5, 2008. Retrieved February 9, 2016.
  2. ^ Ortiz, C. Enrique; Giguère, Éric (2001). Mobile Information Device Profile for Java 2 Micro Edition: Developer's Guide (PDF). John Wiley & Sons. ISBN 978-0471034650. Retrieved May 30, 2012.
  3. ^ "Java™ SE Development Kit 23, 23.0.1 Release Notes". Oracle Corporation. Retrieved October 16, 2024.
  4. ^ "Java™ SE Development Kit 21, 21.0.5 Release Notes". Oracle Corporation. Retrieved October 16, 2024.
  5. ^ "Java™ SE Development Kit 17, 17.0.13 Release Notes". Oracle Corporation. Retrieved October 16, 2024.
  6. ^ "Java™ SE Development Kit 11, 11.0.25 Release Notes". Oracle Corporation. Retrieved October 16, 2024.
  7. ^ "Java™ SE Development Kit 8, Update 431 Release Notes". Oracle Corporation. Retrieved October 16, 2024.
  8. ^ "HotSpot Group". Openjdk.java.net. Retrieved February 9, 2016.
  9. ^ a b "Oracle JDK 8 and JRE 8 Certified System Configurations Contents". Oracle.com. April 8, 2014. Retrieved February 9, 2016.
  10. ^ "Java SE 7 Supported Locales". Oracle.com. Retrieved February 9, 2016.
  11. ^ "OpenJDK: GPLv2 + Classpath Exception". Openjdk.java.net. April 1, 1989. Retrieved February 9, 2016.
  12. ^ "BCL For Java SE". Oracle.com. April 2, 2013. Retrieved February 9, 2016.
  13. ^ Naughton, Patrick. "Java Was Strongly Influenced by Objective-C". Virtual School. Archived from the original on August 13, 2012.
  14. ^ "Why should I uninstall older versions of Java from my system?". www.java.com. Archived from the original on February 12, 2018. Retrieved February 6, 2018.
  15. ^ "Why should I uninstall older versions of Java from my system?". Oracle. Retrieved September 9, 2016.
  16. ^ a b "Oracle Critical Patch Update - July 2016". www.oracle.com.
  17. ^ a b Whittaker, Zack (January 11, 2013). "Homeland Security warns to disable Java amid zero-day flaw". ZDNet. Retrieved February 9, 2016.
  18. ^ Alexander, Christopher. "Java SE 6 Advanced". www.oracle.com. Retrieved May 20, 2018.
  19. ^ "Java SE Overview". Oracle Corporation. Retrieved February 26, 2017.
  20. ^ "Java SE 6 Release Contents". Oracle Corporation and/or its affiliates. Retrieved January 1, 2013.
  21. ^ Moving to OpenJDK as the official Java SE 7 Reference Implementation
  22. ^ Java Platform, Standard Edition 7 Reference Implementations
  23. ^ "Java Platform, Standard Edition 8 Reference Implementations". Archived from the original on November 21, 2015.
  24. ^ "Differences between Java EE and Java SE - Your First Cup: An Introduction to the Java EE Platform". Docs.oracle.com. April 1, 2012. Retrieved July 18, 2012.
  25. ^ "Java EE Overview". Oracle Corporation. Retrieved February 26, 2017.
  26. ^ a b c Lewis, J. P.; Neumann, Ulrich. "Performance of Java versus C++". Graphics and Immersive Technology Lab, University of Southern California.
  27. ^ a b "The Java Faster than C++ Benchmark". Kano.net. November 14, 2003. Retrieved February 9, 2016.
  28. ^ a b FreeTTS – A Performance Case Study Archived 2009-03-25 at the Wayback Machine, Willie Walker, Paul Lamere, Philip Kwok
  29. ^ "OpenJDK FAQ". OpenJDK. Archived from the original on December 7, 2021. Retrieved October 23, 2021.
  30. ^ "BCL for Java SE". Archived from the original on August 14, 2022. Retrieved August 14, 2022.
  31. ^ "Java CPU and PSU Releases Explained". Archived from the original on November 3, 2014.
  32. ^ "Archived copy". Archived from the original on August 14, 2022. Retrieved August 14, 2022.{{cite web}}: CS1 maint: archived copy as title (link)
  33. ^ "Archived copy". Archived from the original on August 10, 2022. Retrieved August 14, 2022.{{cite web}}: CS1 maint: archived copy as title (link)
  34. ^ "Understanding Java 9 Modules". Archived from the original on August 14, 2022. Retrieved August 14, 2022.
  35. ^ "Java Modules".
  36. ^ "Java 9 Structural Changes in the JDK and JRE". October 30, 2017.
  37. ^ "IBM Developer".
  38. ^ "A Guide to Java 9 Modularity | Baeldung". April 18, 2018.
  39. ^ "Chapter 1. Introduction". docs.oracle.com.
  40. ^ www.beanshell.org
  41. ^ "Frequently Asked Questions about Garbage Collection in the Hotspot Java Virtual Machine". Sun Microsystems. February 6, 2003. Retrieved February 7, 2009.
  42. ^ a b Masamitsu, Jon (November 28, 2006). "Presenting the Permanent Generation". Archived from the original on August 25, 2016. Retrieved February 7, 2009.
  43. ^ Nutter, Charles (September 11, 2008). "A First Taste of InvokeDynamic". Retrieved February 7, 2009.
  44. ^ "JEP 122: Remove the Permanent Generation". Oracle Corporation. December 4, 2012. Retrieved March 23, 2014.
  45. ^ "What Is Java, Is It Insecure, and Should I Use It?". Lifehacker.com. January 14, 2013. Retrieved June 26, 2015.
  46. ^ "Is there any protection against Java exploits? | Kaspersky Lab". Kaspersky.com. September 9, 2013. Archived from the original on April 4, 2015. Retrieved June 26, 2015.
  47. ^ Southwick, Karen (1999). High Noon: the inside story of Scott McNealy and the rise of Sun Microsystems. New York [u.a.]: Wiley. pp. 120–122. ISBN 0471297135.
  48. ^ a b Byous, Jon (April 2003). "Java Technology: The Early Years". Sun Microsystems. Archived from the original on May 30, 2008. Retrieved August 2, 2009.
  49. ^ Southwick, Karen (1999). High Noon: the inside story of Scott McNealy and the rise of Sun Microsystems. New York [u.a.]: Wiley. p. 124. ISBN 0471297135.
  50. ^ Walrath, Kathy (December 21, 2001). "Foreword". Sun Microsystems. Retrieved August 2, 2009.
  51. ^ Murphy, Kieron (4 October 1996). "So why did they decide to call it Java?". JavaWorld. Retrieved 2020-07-15. 'The lawyers had told us that we couldn't use the name "OAK" because [it was already trademarked by] Oak Technologies,' said Frank Yellin, a senior engineer at Sun. 'So a brainstorming session was held to come up with ideas for a new name.'
  52. ^ Bank, David (December 1, 1995). "The Java Saga". Wired. Retrieved October 4, 2022. 'It's priced below our cost,' Schmidt says. 'This loses money in the licensing business for the foreseeable future. It's a strategic investment in market share.'
  53. ^ "Sun Microsystems announces formation of JavaSoft" (Press release). Sun Microsystems. 9 January 1996. Archived from the original on 2008-02-10.
  54. ^ "Sun Opens Java". Sun Microsystems. November 13, 2006. Archived from the original on May 13, 2008.
  55. ^ O'Hair, Kelly (December 2010). "OpenJDK7 and OpenJDK6 Binary Plugs Logic Removed". Oracle Corporation. Retrieved November 25, 2011.
  56. ^ "The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 63". Jcp.org. Retrieved February 9, 2016.
  57. ^ "The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 59". Jcp.org. Retrieved February 9, 2016.
  58. ^ "Version 1.5.0 or 5.0?". Java.sun.com. Retrieved February 9, 2016.
  59. ^ "The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 176". Jcp.org. Retrieved February 9, 2016.
  60. ^ "Java Naming". Java.com. Oracle. Retrieved August 25, 2011.
  61. ^ "The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 336". Jcp.org. Retrieved February 9, 2016.
  62. ^ Lea, Doug (September 13, 2004). "JSRs: Java Specification Requests: JSR 166: Concurrency Utilities". Java Community Process. Oracle Corp.
  63. ^ "Java™ SE Development Kit 7 Update 76 Release Notes". Oracle.com. Retrieved February 9, 2016.
  64. ^ "Java 7 and Java 8 Releases by Date". www.java.com.
  65. ^ "Windows XP and Java". Java.com. April 8, 2014. Retrieved February 9, 2016.
  66. ^ "java - installing JDK8 on Windows XP - advapi32.dll error". Stack Overflow.
  67. ^ "Oracle JDK 8 and JRE 8 Certified System Configurations". www.oracle.com.
  68. ^ "Oracle JDK 10 Certified System Configurations". www.oracle.com. Retrieved March 27, 2018. Only X.org Mode supported. Wayland mode is unsupported.
  69. ^ "Oracle Java SE Support Roadmap". Oracle Corporation. September 25, 2018. Retrieved September 25, 2018.
  70. ^ "JDK 11". Oracle Corporation. September 25, 2018. Retrieved September 26, 2018.
  71. ^ "JDK 12". OpenJDK. Retrieved March 22, 2019.
  72. ^ "JDK 13". OpenJDK. Retrieved September 17, 2019.
  73. ^ "JDK 14". OpenJDK. Retrieved March 25, 2020.
  74. ^ "Deprecated List (Java SE 22)". cr.openjdk.org. Retrieved April 16, 2024.
  75. ^ "Remove Thread.countStackFrames". bugs.openjdk.org. Retrieved April 16, 2024.
  76. ^ "Java SE 22 ( JSR 397)". cr.openjdk.org. Retrieved April 16, 2024.
  77. ^ "What is Java technology and why do I need it?". Archived from the original on September 25, 2010. Retrieved December 15, 2011. Java runs on more than 850 million personal computers worldwide, and on billions of devices worldwide, including mobile and TV devices.
  78. ^ "Java - Fedora Project Wiki". fedoraproject.org.
  79. ^ "IntelliJ Platform".
  80. ^ Topic, Dalibor (January 27, 2016). "Moving to a plugin-free web". Oracle.
  81. ^ "Duke, the Java Mascot". Oracle. Retrieved March 18, 2019.
  82. ^ "duke: Project Home Page". Sun Microsystems. Archived from the original on June 18, 2007. Retrieved March 18, 2007.
  83. ^ "Duke, the Java Mascot".
  84. ^ "Future Tech Duke (The Java Source)". Tori Wieldt. Archived from the original on August 20, 2011. Retrieved August 17, 2011.
  85. ^ Smith, Donald (September 11, 2018). "Oracle JDK Releases for Java 11 and Later".
  86. ^ Stallman, Richard (May 24, 2006). "The Curious Incident of Sun in the Night-Time". Groklaw.
  87. ^ Schwartz, Jonathan. "?". Jonathan Schwartz's Blog. Sun Microsystems. Archived from the original on July 15, 2006.
  88. ^ "Oracle OpenWorld: UnBreakable Linux / 5015.2 not on the horizon | Formtek Blog". Formtek.com. October 26, 2006. Retrieved February 9, 2016.
  89. ^ "Oracle and Sun Microsystems | Strategic Acquisitions | Oracle". Sun.com. Retrieved February 9, 2016.
  90. ^ "Free but Shackled – The Java Trap – GNU Project – Free Software Foundation". Gnu.org. April 12, 2004. Retrieved February 9, 2016.
  91. ^ "Sun 'releases' Java to the World". BBC News. November 13, 2006. Retrieved May 6, 2010.
  92. ^ "Open JDK is here!". Sun Microsystems. May 8, 2007. Retrieved May 9, 2007.
  93. ^ Wielaard, Mark (May 30, 2007). "OpenJDK6 b10 source posted". Retrieved July 12, 2008.
  94. ^ "Redhat Java".
  95. ^ "Fedora Java".
  96. ^ "Debian Java".
  97. ^ "Ubuntu Java".
  98. ^ Sharples, Rich (June 19, 2008). "Java is finally Free and Open". Archived from the original on June 20, 2008.
  99. ^ libgdx (December 9, 2013). "Bundling a jre · libgdx/libgdx Wiki · GitHub". Github.com. Retrieved February 9, 2016.
  100. ^ "Question about bundling custom OpenJDK". Java-Gaming.org. Archived from the original on March 4, 2016. Retrieved February 9, 2016.
  101. ^ Cluley, Graham (January 15, 2013). ""Unless it is absolutely necessary to run Java in web browsers, disable it", DHS-sponsored CERT team says – Naked Security". Nakedsecurity.sophos.com. Retrieved February 9, 2016.
  102. ^ "Generics in Java". Object Computing, Inc. Archived from the original on January 2, 2007. Retrieved December 9, 2006.
  103. ^ "What's Wrong With Java: Type Erasure". December 6, 2006. Archived from the original on July 22, 2012. Retrieved December 9, 2006.
  104. ^ "Java and Scala's Type Systems are Unsound" (PDF).
  105. ^ "Java libraries should provide support for unsigned integer arithmetic". Bug Database, Sun Developer Network. Oracle. Retrieved January 18, 2011.
  106. ^ Owens, Sean R. (November 5, 2009). "Java and unsigned int, unsigned short, unsigned byte, unsigned long, etc. (Or rather, the lack thereof)". darksleep.com. Retrieved October 9, 2010.
  107. ^ Kahan, W.; Darcy, Joseph D. (March 1, 1998). "How Java's Floating-Point Hurts Everyone Everywhere" (PDF). Retrieved December 9, 2006.
  108. ^ "Types, Values, and Variables". Sun Microsystems. Retrieved December 9, 2006.
  109. ^ "Which programming languages are fastest?". Computer Language Benchmarks Game. Archived from the original on August 14, 2011.
  110. ^ "speed ÷ C++ GNU g++ speed". Computer Language Benchmarks Game. Archived from the original on September 26, 2011.
  111. ^ "C++ vs Java performance; It's a tie! | Blog of Christian Felde". Blog.cfelde.com. June 27, 2010. Retrieved February 9, 2016.
  112. ^ "Java Security Architecture: Contents". Docs.oracle.com. October 2, 1998. Retrieved February 9, 2016.
  113. ^ Horowitz, Michael (August 31, 2012). "Java security flaw: yada yada yada | Computerworld". Blogs.computerworld.com. Archived from the original on July 24, 2014. Retrieved February 9, 2016.
  114. ^ Brook, Chris. "The first stop for security news". Threatpost. Archived from the original on March 8, 2013. Retrieved February 9, 2016.
  115. ^ "Why and How to Disable Java on Your Computer Now - Technology & science - Innovation". NBC News. January 12, 2013. Archived from the original on February 21, 2014. Retrieved February 9, 2016.
  116. ^ "US Department of Homeland Security Calls On Computer Users To Disable Java". Forbes.com. Retrieved February 9, 2016.
  117. ^ Brook, Chris. "The first stop for security news". Threatpost. Archived from the original on April 9, 2013. Retrieved February 9, 2016.
  118. ^ "Critical Patch Updates and Security Alerts". Oracle.com. Retrieved February 9, 2016.
  119. ^ Finkle, Jim (January 14, 2013). "Emergency patch for Java fails to fix cybercrime holes, warn experts". Independent.ie. Retrieved February 9, 2016.
  120. ^ Kelly, Meghan (January 14, 2013). "Oracle issues fix for Java exploit after DHS warns of its holes". VentureBeat. Retrieved February 9, 2016.
  121. ^ Krebs, Brian (February 16, 2016). "Good Riddance to Oracle's Java Plugin". KrebsOnSecurity.
  122. ^ Gonsalves, Antone (September 5, 2012). "Java Is No Longer Needed. Pull The Plug-In". ReadWrite. Wearable World.
  123. ^ "Java: should you remove it?". The Guardian. February 8, 2013.
  124. ^ Bott, Ed. "A close look at how Oracle installs deceptive software with Java updates". ZDNet.com. ZDNet. Retrieved December 14, 2014.
  125. ^ "windows 7 - How do I update Java from a non-admin account?". Super User.
  126. ^ "Update Google Chrome - Computer - Google Chrome Help". support.google.com.
  127. ^ "Adobe Security Bulletin". helpx.adobe.com.
[edit]
Listen to this article (42 minutes)
Spoken Wikipedia icon
This audio file was created from a revision of this article dated 19 August 2013 (2013-08-19), and does not reflect subsequent edits.