| Java (software platform) | |
|---|---|
The Java technology logo | |
| Original authors | James Gosling,Sun Microsystems |
| Developer | Oracle Corporation |
| Initial release | January 23, 1996; 30 years ago (1996-01-23)[1][2] |
| Stable release | 25LTS (September 16, 2025; 4 months ago (2025-09-16)[3]) [±] 21.0.5 LTS (October 15, 2024; 15 months ago (2024-10-15)[4]) [±] |
| Written in | Java,C++,C,assembly language[8] |
| Operating system | Microsoft Windows 10+,Linux,macOS,[9] and for old versions:Solaris |
| Platform | x64,ARMv8, and for old versions:ARMv7,IA-32,SPARC (up to Java 14)(Java 8 includes32-bit support forWindows – while no longer supported freely by Oracle for commercial use)[9] |
| Available in | English, Chinese, French, German, Italian, Japanese, Korean, Portuguese, Spanish, Swedish[10] |
| Type | Software platform |
| License | Dual-license:GNU General Public License version 2 with classpath exception,[11] and aproprietary license.[12] |
| Website | |

Java is a set ofcomputer software and specifications that provides asoftware platform for developingapplication software and deploying it in across-platform computing environment. Java is used in a wide variety ofcomputing platforms fromembedded devices andmobile phones toenterprise servers andsupercomputers.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 inHTML pages.
Writing in theJava programming language is the primary way to produce code that will be deployed asbyte code in aJava virtual machine (JVM); byte codecompilers are also available for other languages, includingAda,JavaScript,Kotlin (Google's preferred Android language),Python, andRuby. In addition, several languages have been designed to run natively on the JVM, includingClojure,Groovy, andScala.Java syntax borrows heavily fromC andC++, but object-oriented features are modeled afterSmalltalk andObjective-C.[13] Java eschews certainlow-level constructs such aspointers and has a very simplememory model where objects areallocated on the heap (while some implementations e.g. all currently supported by Oracle, may useescape analysis optimization to allocate on thestack instead) and all variables of object types arereferences.Memory management is handled through integrated automaticgarbage collection performed by the JVM.
The latest version isJava 25 released in September 2025, the latestlong-term support (LTS) version. It is one of a few LTS versions still supported, down to Java 8 LTS. Oracle extended support for Java 6 ended in December 2018.[14] As an open source platform, Java has many distributors, includingAmazon,IBM,Azul Systems, andAdoptOpenJDK. 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,[15] because of serious risks due to unresolved security issues.[16][17][18] Since Java 9 (as well as versions 10, 12–16, 18–20, and 22–24) 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 thelegacy Java 8 LTS in January 2019, and will continue to support Java 8 with public updates for personal use indefinitely.
The Java platform is a suite of programs that facilitate developing and running programs written in theJava programming language. A Java platform includes an execution engine (called avirtual machine), a compiler and a set oflibraries; there may also be additionalservers and alternative libraries that depend on the requirements. Java platforms have been implemented for a wide variety ofhardware and operating systems with a view to enable Java programs torun identically on all of them.
The Java platform consists of several programs, each of which provides a portion of its overall capabilities. For example, theJava compiler, which converts Java source code into Java bytecode (an intermediate language for the JVM), is provided as part of theJava Development Kit (JDK). TheJava Runtime Environment (JRE), complementing the JVM with ajust-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.
Different platforms target different classes of device andapplication domains:
Java Platform, Standard Edition (Java SE) is acomputing platform,technical standard for execution of applications on independentJava-supported platforms as suchportable code fordesktop andserver environments.[19][20] Java SE was formerly known as Java 2 Platform, Standard Edition (J2SE).
The platform uses theJava programming language and is part of the Java software-platform family. Java SE defines a range of general-purposeAPIs—such asJava APIs for theJava Class Library—and also includes theJava Language Specification and theJava Virtual Machine Specification.[21]OpenJDK is the officialreference implementation since version 7.[22][23][24]
Jakarta EE, formerly Java Platform, Enterprise Edition (Java EE) and Java 2 Platform, Enterprise Edition (J2EE), is a set of specifications, extendingJava SE[25] with specifications for enterprise features such asdistributed computing andweb services.[26] Jakarta EE applications are run onreference runtimes, which can bemicroservices orapplication servers, which handle transactions, security, scalability,concurrency and management of the components they are deploying.
The heart of the Java platform is the "virtual machine" that executesJava 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 onlyforward compatible. There is a JIT (Just In Time) compiler within theJava 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.[27][28][29]Since JRE version 1.2, Sun's JVM implementation has included ajust-in-time compiler instead of an interpreter.
Although Java programs arecross-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.
TheJava Development Kit (JDK) is asoftware development kit for development of aJava platform application.[30]
JDK is designed to be mainly used to communicating with the JRE, but itcan be replaced by others JDK-based languages which can communicate withJRE andJVM, for example,Kotlin.^ Furthermore, Java bytecodecan be compiled statically directly into native code only with a JVM but without the necessity of the Java runtime environment running dynamically.
It implements the JavaLanguage Specification (JLS) and the Java Virtual Machine Specification (JVMS) and provides the Standard Edition (SE) of the JavaApplication Programming Interface (API). It is derivative of the community drivenOpenJDK which Oracle stewards.[31] 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 thex86-64 architecture forWindows,macOS, andLinux based operating systems, and for theaarch64 architecture for macOS and Linux. Previous versions supported theOracle Solaris operating system andSPARC architecture.
Oracle's primary implementation of the JVMS is known asHotSpot.
TheJava Runtime Environment (JRE) released by Oracle is a freely available software distribution containing a stand-alone JVM(HotSpot), the Javastandard 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 onpersonal computers in the laptop and desktopform factor.Mobile phones includingfeature phones and earlysmartphones that ship with a JVM are most likely to include a JVM meant to run applications targetingMicro Edition of the Java platform. Meanwhile, most modern smartphones,tablet computers, and otherhandheld PCs that run Java apps are most likely to do so through support of theAndroid 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 outputDalvik 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[32] was 8u201 and, the last Patch Set Update version with the same license was 8u202.[33][34] The last Oracle JRE implementation, regardless of its licensing scheme, was 9.0.4.[35] Since Java Platform SE 9, the whole platform also was grouped intomodules.[36] 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.[37][38][39][40]
In most modernoperating systems (OSs), a large body of reusable code is provided to simplify the programmer's job. This code is typically provided as a set ofdynamically 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, theSwing 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. Thejava.net andjava.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.
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.[41]
Third parties have produced manycompilers orinterpreters that target the JVM. Some of these are for existing languages, while others are for extensions to the Java language. These include:
The success of Java and itswrite 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 theCommon 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 namedJ++, then calledVisual J# that was incompatible with the Java specification. It was discontinued 2007, and support for it ended in 2015.
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.
TheJava virtual machine heap is the area of memory used by the JVM fordynamic memory allocation.[43]
In HotSpot the heap is divided intogenerations:
Thepermanent generation (orpermgen) was used for class definitions and associated metadata prior to Java 8. Permanent generation was not part of the heap.[44][45] Thepermanent generation was removed from Java 8.[46]
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.[44]
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.[47] 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 accessibleattack 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.[48] Java applets were removed in Java 11, released on September 25, 2018.
| Java version | Year | Changes |
|---|---|---|
| 25 | 2025 | A Long-Term Support (LTS) release |
| 21 | 2023 | A Long-Term Support (LTS) release |
| 17 | 2021 | An LTS release, has several enhancements, provides pattern matching forswitch statements andsealed classes |
| 16 | 2021 | Introducedrecord classes,pattern matching, andsealed classes for enhanced data modelling abilities |
| 15 | 2020 | Introducedtext blocks,sealed classes as preview features, enhancing string and class handling |
| 14 | 2020 | Introduced new featuresrecord classes andpattern matching forinstanceof as preview features |
| 13 | 2019 | Included enhancements,text blocks, reimplementation of legacySocket API |
| 12 | 2019 | Introducedswitch expressions, newShenandoah garbage collector |
| 11 | 2018 | An LTS release, introduced newHTTP client, removed Java EE and CORBA modules |
| 10 | 2018 | IntroducedLocal-Variable Type Inference (var), allows declaring local variables without specifying type |
| 9 | 2017 | IntroducedJava Platform Module System (JPMS) for modularizing applications,JShell interactive Java REPL |
| 8 | 2014 | Major release, introducedLambda Expressions, newDate and Time API for better productivity |
| 7 | 2011 | Introducedtry-with-resources,Switch on String,Diamond Operator, included expanded exception handling, new file I/O library (NIO.2) |
| 6 | 2006 | IntroducedScripting Language Support (JSR 223),Web Service Enhancements, provided JDBC 4.0 with SQL XML support |
| 5 | 2004 | Significant release, includedGenerics, anEnhanced for Loop,Autoboxing/Unboxing,Static Import,Varargs,Enumerations,Annotations |
| 4 | 2002 | IntroducedRegular Expressions,Exception Chaining, new set of I/O APIs named NIO (New Input/Output), newLogging API |
| 3 | 2000 | Included new Sun JVM namedHotSpot, introducedJava Naming and Directory Interface (JNDI),Java Platform Debugger Architecture (JPDA) |
| 2 | 1998 | IntroducedCollections Framework,Java String memory map for constants, aJust In Time (JIT) compiler, andSwing API for GUIs |
| 1.1 | 1997 | IntroducedInner 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 |

Java began as an internal project atSun Microsystems in December 1990, providing an alternative to the C++/C programming languages. EngineerPatrick Naughton had become increasingly frustrated with the state of Sun's C++ and Capplication programming interfaces (APIs) and tools, as well as with the way theNeWS project was handled by the organization. Naughton informedScott McNealy about his plan of leaving Sun and moving toNeXT; 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 theStealth Project started.[49]
The Stealth Project was soon renamed to theGreen Project, withJames Gosling and Mike Sheridan joining Naughton. Together with other engineers, they began work in a small office onSand Hill Road inMenlo Park, California. They aimed to develop new technology for programming next-generation smart appliances, which Sun expected to offer major new opportunities.[50]
The team originally considered using C++, but rejected it for several reasons. Because they were developing anembedded system with limited resources, they decided that C++ needed too much memory and that its complexity led to developer errors. The language's lack ofgarbage 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, andthreading. Finally, they wanted a platform that would port easily to all types of devices.
Bill Joy had envisioned a new language combiningMesa and C. In a paper calledFurther, he proposed to Sun that its engineers should produce anobject-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 calledOak, after the tree that stood just outside his office.[51]
By the summer of 1992, the team could demonstrate portions of the new platform, including the GreenOS, the Oak language, the libraries, and the hardware. Their first demonstration, on September 3, 1992, focused on building apersonal digital assistant (PDA) device namedStar7[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 becomeFirstperson, a wholly owned subsidiary of Sun Microsystems, and the team relocated toPalo Alto, California.[52] The Firstperson team had an interest in building highly interactive devices, and whenTime Warner issued arequest for proposal (RFP) for aset-top box, Firstperson changed their target and responded with a proposal for a set-top box platform. However, thecable industry felt that their platform gave too much control to the user, so Firstperson lost their bid toSGI. An additional deal withThe 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.

In June and July 1994 – after three days of brainstorming withJohn Gage (the Director of Science for Sun), Gosling, Joy, Naughton,Wayne Rosing, andEric Schmidt – the team re-targeted the platform for theWorld Wide Web. They felt that with the advent of graphicalweb browsers likeMosaic 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 movieBlade Runner), renamedHotJava[50] in 1995.
Sun renamed the Oak language toJava after atrademark search revealed thatOak Technology used the nameOak.[53] Sun priced Java licenses below cost to gain market share.[54] 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 ofNetscape 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.[55]
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.
On November 13, 2006, Sun Microsystems made the bulk of its implementation of Java available under theGNU General Public License (GPL).[56][57]
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 standardlibrary. Since J2SE 1.4 theJava Community Process (JCP) has governed the evolution of the Java Language. The JCP usesJava Specification Requests (JSRs) to propose and specify additions and changes to the Java platform. TheJava Language Specification (JLS) specifies the language; changes to the JLS are managed under JSR 901.[58]
Sun releasedJDK 1.1 on February 19, 1997. Major additions included an extensive retooling of theAbstract Window Toolkit (AWT) event model,inner classes added to the language,JavaBeans, andJava Database Connectivity (JDBC).
J2SE 1.2 (December 8, 1998) – CodenamePlayground. This and subsequent releases through J2SE 5.0 were rebrandedJava 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 includedreflection, acollections framework,Java IDL (aninterface description language implementation forCORBA interoperability), and the integration of theSwing graphical API into the core classes. AJava plug-in was released (since then web browser vendors have removed support for, and it's nowdeprecated for removal of Java codebase and will be removed by Java 26 in 2026[59]), and Sun's JVM was equipped with aJIT compiler for the first time.
J2SE 1.3 (May 8, 2000) – CodenameKestrel. Notable changes included the bundling of theHotSpot JVM (the HotSpot JVM was first released in April, 1999 for the J2SE 1.2 JVM),JavaSound,Java Naming and Directory Interface (JNDI) andJava Platform Debugger Architecture (JPDA).
J2SE 1.4 (February 6, 2002) – CodenameMerlin. This became the first release of the Java platform developed under the Java Community Process as JSR 59.[60] Major changes includedregular expressions modeled afterPerl,exception chaining, an integratedXML parser andXSLT processor (JAXP), andJava Web Start.
J2SE 5.0 (September 30, 2004) – CodenameTiger. It was originally numbered 1.5, which is still used as the internal version number.[61] Developed under JSR 176, Tiger added several significant new language features including thefor-each loop,generics,autoboxing andvar-args.[62]
Java SE 6 (December 11, 2006) – CodenameMustang. It was bundled with a database manager and facilitates the use of scripting languages with the JVM (such asJavaScript usingMozilla'sRhino engine). As of this version, Sun replaced the name "J2SE" withJava SE and dropped the ".0" from the version number.[63] Other major changes include support for pluggableannotations (JSR 269), manyGUI improvements, including native UI enhancements to support the look and feel ofWindows Vista, and improvements to theJava Platform Debugger Architecture (JPDA) & JVM Tool Interface for better monitoring and troubleshooting.
Java SE 7 (July 28, 2011) – CodenameDolphin. This version developed under JSR 336.[64] It added many small language changes including strings in switch, try-with-resources andtype 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,[65] an improved new file I/O library and support for new network protocols such asSCTP. Java 7 Update 76 was released in January 2015, with expiration date April 14, 2015.[66]
In June 2016, after the last public update of Java 7,[67] "remotely exploitable" security bugs in Java 6, 7, and 8 were announced.[17]
Java SE 8 (March 18, 2014) – CodenameKenai. Notable changes include language-level support forlambda 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 theWindows XP platform,[68] 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 functioningJava Runtime Environment.[69] 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).[70]
Java SE 9 and10 have higher system requirements, i.e. Windows 7 or Server 2012 (and web browser minimum certified is upped toInternet Explorer 11 or other web browsers), and Oracle dropped32-bit compatibility for all platforms, i.e. only Oracle's "64-bit Java virtual machines (JVMs) are certified".[71]
Java SE 11 LTS was released September 2018, the firstLTS release since therapid 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.[72] Java 11 features include two new garbage collector implementations, Flight Recorder to debug deep issues, a new HTTP client includingWebSocket support.[73]
Java SE 12 was released March 2019.[74]
Java SE 13 was released September 2019.[75]
Java SE 14 was released March 2020.[76]
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 asSwing andJava 2D, have evolved, and many of the original JDK 1.0 classes and methods have beendeprecated (thereof some "terminally deprecated"), e.g. related to finalization.[77]
At least one very rarely-used API (for threading) has been removed from Java 22.[78][79]

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.[80]Microsoft has not bundled aJava Runtime Environment (JRE) with itsoperating systems since Sun Microsystems sued Microsoft for adding Windows-specific classes to the bundled Java runtime environment, and for making the new classes available throughVisual J++.[citation needed] Apple no longer includes a Java runtime withOS X as ofversion 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] ManyLinux distributions include theOpenJDK runtime as the default virtual machine, negating the need to download the proprietary Oracle JRE.[81]
Some Java applications are in fairly widespread desktop use, including theNetBeans,Eclipse andJetBrains[82]integrated development environments, and file sharing clients such asLimeWire andVuze. Java is also used in theMATLAB mathematics programming environment, both for rendering theuser interface and as part of the core system. Java provides cross platform user interface for some high end collaborative applications such asLotus 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.[83]

Java'smascot is named Duke.[84]
When Sun announced thatJava SE andJava ME would be released under afree software license (theGNU General Public License), they released the Duke graphics under the freeBSD license at the same time.[85] A new Duke personality is created every year.[86] For example, in July 2011 "Future Tech Duke" included a bigger nose, a jetpack, and blue wings.[87]
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,[88] 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 theOpen Source Initiative or theFree Software Foundation to be considered open source or free software, and Sun Java was therefore a proprietary platform.[89]
While several third-party projects (e.g.GNU Classpath andApache Harmony) createdfree software partial Java implementations, the large size of the Sun libraries combined with the use ofclean 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]

Sun announced inJavaOne 2006 that Java would becomefree andopen-source software,[90] 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 coreJava Platform as free and open source software within 30 to 60 days.[91]
Sun released the Java HotSpot virtual machine and compiler as free software under theGNU 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").[92] According toRichard Stallman, this would mean an end to the "Java trap".[93]Mark Shuttleworth called the initial press announcement, "A real milestone for thefree software community".[94]
Sun released thesource code of theClass library underGPL 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.[95] 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 (seeOpenJDK 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 calledIcedTea created a completely free and highly usable JDK by replacing encumbered code with either stubs or code fromGNU Classpath. However OpenJDK has since become buildable without the encumbered parts (from OpenJDK 6 b10[96]) and has become the default runtime environment for most Linux distributions.[97][98][99][100]
In June 2008, it was announced thatIcedTea6 (as the packaged version of OpenJDK onFedora 9) has passed theTechnology Compatibility Kit tests and can claim to be a fully compatible Java 6 implementation.[101]
Because OpenJDK is under the GPL, it is possible to redistribute a custom version of the JRE directly with software applications,[102][103] 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.
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.[104] 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]
Whengenerics were added to Java 5.0, there was already a large framework of classes (many of which were alreadydeprecated), so generics were chosen to be implemented usingerasure to allow formigration 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.[105][106] The addition of type wildcards made Java unsound.[107]
Java lacks nativeunsigned integer types. Unsigned data are often generated from programs written inC 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.[108]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.[109]
Java'sfloating-point arithmetic is largely based onIEEE 754 (Standard for Binary Floating-Point Arithmetic), but certain features are not supported even when using thestrictfp 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.[110][111]
In the early days of Java (before theHotSpot 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).[112][113][114]
Java's performance has improved substantially since the early versions.[27] Performance ofJIT compilers relative to native compilers has in some optimized tests been shown to be quite similar.[27][28][29]
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.
The Java platform provides a security architecture[115] 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 bymalware, 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 aremote exploit to take place by simply loading a malicious web page.[116]Java 5 was later found to be flawed as well.[117]
On January 10, 2013, three computer specialists spoke out against Java, tellingReuters 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."[118]This vulnerability affectsJava 7 and it is unclear if it affectsJava 6, so it is suggested that consumers disable it.[119][120] Security alerts from Oracle announce schedules of critical security-related patches to Java.[121]
On January 14, 2013, security experts said that the update still failed to protect PCs from attack.[122] This exploit hole prompted a response from theUnited States Department of Homeland Security encouraging users to disable or uninstall Java.[18] Apple blacklisted Java in limited order for all computers running itsOS X operating system through a virus protection program.[123]
In 2014 and responding to then-recent Java security and vulnerability issues, security bloggerBrian 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."[124] "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."[125] "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."[126]
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".[127] 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".
Java has yet to release an automatic updater that does not require user intervention and administrative rights[128] unlike Google Chrome[129] and Flash player.[130]
{{cite web}}: CS1 maint: archived copy as title (link){{cite web}}: CS1 maint: archived copy as title (link)'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.'
'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.'
Only X.org Mode supported.Wayland mode is unsupported.
Java runs on more than 850 million personal computers worldwide, and on billions of devices worldwide, including mobile and TV devices.