Java (software platform)
Original author(s) | James Gosling, Sun Microsystems |
---|---|
Developer(s) | Oracle Corporation |
Initial release | January 23, 1996[1][2] |
Stable release | 22.0.1 (April 19, 2024[±] 21.0.0 LTS (September 19, 2023 ) [±] | )
Written in | Software platform |
License | Dual-license: GNU General Public License version 2 with classpath exception,[8] and a proprietary license.[9] |
Website |
Java is a set of
Writing in the
Latest version
The latest version is
Platform
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
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
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.
- enterprise applications.
Java SE
Java Platform, Standard Edition (Java SE) is a computing platform for development and deployment of portable code for desktop and server environments.[16] Java SE was formerly known as Java 2 Platform, Standard Edition (J2SE).
The platform uses theJakarta EE
Java virtual machine
The heart of the Java platform is the "virtual machine" that executes
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.[23][24][25] Since JRE version 1.2, Sun's JVM implementation has included a just-in-time compiler instead of an interpreter.
Although Java programs are
Java Development Kit
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.[26] 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
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[27] was 8u201 and, the last Patch Set Update version with the same license was 8u202.[28][29] The last Oracle JRE implementation, regardless of its licensing scheme, was 9.0.4.[30] Since Java Platform SE 9, the whole platform also was grouped into modules.[31] 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.[32][33][34][35]
Class libraries
In most modern
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
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.[36]
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[37] (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)
- dialect of the Lisp programming languageon 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
- JVM (and non-JVM, for e.g. desktop and iOS) with full Javainteroperability (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
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
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.
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
The Java virtual machine heap is the area of memory used by the JVM for
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.[39][40] The permanent generation was removed from Java 8.[41]
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.[39]
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.[42] 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.[43] Java applets were removed in Java 11, released on September 25, 2018.
Java versions
Java version |
Year | Changes |
---|---|---|
17 | 2021 | A Long Term Support (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
The Java platform and language began as an internal project at
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.[45]
The team originally considered using C++, but rejected it for several reasons. Because they were developing an
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.[46]
By the summer of 1992, the team could demonstrate portions of the new platform, including the Green
Java meets the Web
In June and July 1994 – after three days of brainstorming with
Sun renamed the Oak language to Java after a
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.
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).[51][52]
Version history
The Java language has undergone several changes since the release of JDK (
Sun released JDK 1.1 on February 19, 1997. Major additions included an extensive retooling of the
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" (
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.
J2SE 5.0 (September 30, 2004) – Codename Tiger. It was originally numbered 1.5, which is still used as the internal version number.
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
Java SE 7 (July 28, 2011) – Codename Dolphin. This version developed under JSR 336.
In June 2016, after the last public update of Java 7,[61] "remotely exploitable" security bugs in Java 6, 7, and 8 were announced.[13]
Java SE 8 (March 18, 2014) – Codename Kenai. Notable changes include language-level support for
Java SE 9 and 10 have higher system requirements, i.e. Windows 7 or Server 2012 (and web browser minimum certified is upped to
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.[66] Java 11 features include two new garbage collector implementations, Flight Recorder to debug deep issues, a new HTTP client including WebSocket support.[67]
Java SE 12 was released March 2019.[68]
Java SE 13 was released September 2019.[69]
Java SE 14 was released March 2020.[70]
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.[71]
At least one very rarely-used API (for threading) has been removed from Java 22.[72][73]
Usage
Desktop use
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.
Some Java applications are in fairly widespread desktop use, including the
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.[76]
Mascot
When Sun announced that
Licensing
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,[81] 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.[82]
While several third-party projects (e.g.
Free software
Sun announced in JavaOne 2006 that Java would become free and open-source software,[83] 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.[84]
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").[85] According to Richard Stallman, this would mean an end to the "Java trap".[86] Mark Shuttleworth called the initial press announcement, "A real milestone for the free software community".[87]
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.[88] 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[89]) and has become the default runtime environment for most Linux distributions.[90][91][92][93]
In June 2008, it was announced that
Because OpenJDK is under the GPL, it is possible to redistribute a custom version of the JRE directly with software applications,[95][96] 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
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.[97] 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
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.[98][99] The addition of type wildcards made Java unsound.[100]
Unsigned integer types
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.[101] 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.[102]
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 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.[103][104]
Performance
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).[105][106][107]
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
The Java platform provides a security architecture[108] 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.[109] Java 5 was later found to be flawed as well.[110]
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."[111] This vulnerability affects Java 7 and it is unclear if it affects Java 6, so it is suggested that consumers disable it.[112][113] Security alerts from Oracle announce schedules of critical security-related patches to Java.[114]
On January 14, 2013, security experts said that the update still failed to protect PCs from attack.[115] This exploit hole prompted a response from the United States Department of Homeland Security encouraging users to disable or uninstall Java.[14] Apple blacklisted Java in limited order for all computers running its OS X operating system through a virus protection program.[116]
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."[117] "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."[118] "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."[119]
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 toolbar" that will redirect browser searches to ads and "McAfee Security Scan Plus".[120] 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
Java has yet to release an automatic updater that does not require user intervention and administrative rights[121] unlike Google Chrome[122] and Flash player.[123]
See also
- List of Java APIs
- Java logging framework
- Java performance
- JavaFX
- Jazelle
- Java ConcurrentMap
- Comparison of the Java and .NET platforms
- List of JVM languages
- List of computing mascots
References
- ^ "JavaSoft ships Java 1.0" (Press release). Archived from the original on February 5, 2008. Retrieved February 9, 2016.
- ISBN 978-0471034650. Retrieved May 30, 2012.
- ^ "JDK Releases". Oracle Corporation. Retrieved December 9, 2022.
- ^ "JDK Releases". Oracle Corporation. Retrieved January 17, 2024.
- ^ "HotSpot Group". Openjdk.java.net. Retrieved February 9, 2016.
- ^ a b "Oracle JDK 8 and JRE 8 Certified System Configurations Contents". Oracle.com. April 8, 2014. Retrieved February 9, 2016.
- ^ "Java SE 7 Supported Locales". Oracle.com. Retrieved February 9, 2016.
- ^ "OpenJDK: GPLv2 + Classpath Exception". Openjdk.java.net. April 1, 1989. Retrieved February 9, 2016.
- ^ "BCL For Java SE". Oracle.com. April 2, 2013. Retrieved February 9, 2016.
- ^ Naughton, Patrick. "Java Was Strongly Influenced by Objective-C". Virtual School. Archived from the original on August 13, 2012.
- ^ "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.
- ^ "Why should I uninstall older versions of Java from my system?". Oracle. Retrieved September 9, 2016.
- ^ a b "Oracle Critical Patch Update - July 2016". www.oracle.com.
- ^ a b Whittaker, Zack (January 11, 2013). "Homeland Security warns to disable Java amid zero-day flaw". ZDNet. Retrieved February 9, 2016.
- ^ Alexander, Christopher. "Java SE 6 Advanced". www.oracle.com. Retrieved May 20, 2018.
- ^ "Java SE Overview". Oracle Corporation. Retrieved February 26, 2017.
- ^ "Java SE 6 Release Contents". Oracle Corporation and/or its affiliates. Retrieved January 1, 2013.
- ^ Moving to OpenJDK as the official Java SE 7 Reference Implementation
- ^ Java Platform, Standard Edition 7 Reference Implementations
- ^ "Java Platform, Standard Edition 8 Reference Implementations". Archived from the original on November 21, 2015.
- ^ "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.
- ^ "Java EE Overview". Oracle Corporation. Retrieved February 26, 2017.
- ^ a b c Lewis, J. P.; Neumann, Ulrich. "Performance of Java versus C++". Graphics and Immersive Technology Lab, University of Southern California.
- ^ a b "The Java Faster than C++ Benchmark". Kano.net. November 14, 2003. Retrieved February 9, 2016.
- ^ a b FreeTTS – A Performance Case Study Archived 2009-03-25 at the Wayback Machine, Willie Walker, Paul Lamere, Philip Kwok
- ^ "OpenJDK FAQ". OpenJDK. Retrieved October 23, 2021.
- ^ "BCL for Java SE". Archived from the original on August 14, 2022. Retrieved August 14, 2022.
- ^ "Java CPU and PSU Releases Explained". Archived from the original on November 3, 2014.
- ^ "Archived copy". Archived from the original on August 14, 2022. Retrieved August 14, 2022.
{{cite web}}
: CS1 maint: archived copy as title (link) - ^ "Archived copy". Archived from the original on August 10, 2022. Retrieved August 14, 2022.
{{cite web}}
: CS1 maint: archived copy as title (link) - ^ "Understanding Java 9 Modules". Archived from the original on August 14, 2022. Retrieved August 14, 2022.
- ^ "Java Modules".
- ^ "Java 9 Structural Changes in the JDK and JRE". October 30, 2017.
- ^ "IBM Developer".
- ^ "A Guide to Java 9 Modularity | Baeldung". April 18, 2018.
- ^ "Chapter 1. Introduction". docs.oracle.com.
- ^ www
.beanshell .org - ^ "Frequently Asked Questions about Garbage Collection in the Hotspot Java Virtual Machine". Sun Microsystems. February 6, 2003. Retrieved February 7, 2009.
- ^ a b Masamitsu, Jon (November 28, 2006). "Presenting the Permanent Generation". Archived from the original on August 25, 2016. Retrieved February 7, 2009.
- ^ Nutter, Charles (September 11, 2008). "A First Taste of InvokeDynamic". Retrieved February 7, 2009.
- ^ "JEP 122: Remove the Permanent Generation". Oracle Corporation. December 4, 2012. Retrieved March 23, 2014.
- ^ "What Is Java, Is It Insecure, and Should I Use It?". Lifehacker.com. January 14, 2013. Retrieved June 26, 2015.
- ^ "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.
- ISBN 0471297135.
- ^ 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.
- ISBN 0471297135.
- ^ Walrath, Kathy (December 21, 2001). "Foreword". Sun Microsystems. Retrieved August 2, 2009.
- 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.'
- ^ 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.'
- ^ "Sun Microsystems announces formation of JavaSoft" (Press release). Sun Microsystems. 9 January 1996. Archived from the original on 2008-02-10.
- ^ "Sun Opens Java". Sun Microsystems. November 13, 2006. Archived from the original on May 13, 2008.
- ^ O'Hair, Kelly (December 2010). "OpenJDK7 and OpenJDK6 Binary Plugs Logic Removed". Oracle Corporation. Retrieved November 25, 2011.
- ^ "The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 63". Jcp.org. Retrieved February 9, 2016.
- ^ "The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 59". Jcp.org. Retrieved February 9, 2016.
- ^ "Version 1.5.0 or 5.0?". Java.sun.com. Retrieved February 9, 2016.
- ^ "The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 176". Jcp.org. Retrieved February 9, 2016.
- ^ "Java Naming". Java.com. Oracle. Retrieved August 25, 2011.
- ^ "The Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 336". Jcp.org. Retrieved February 9, 2016.
- ^ Lea, Doug (September 13, 2004). "JSRs: Java Specification Requests: JSR 166: Concurrency Utilities". Java Community Process. Oracle Corp.
- ^ "Java™ SE Development Kit 7 Update 76 Release Notes". Oracle.com. Retrieved February 9, 2016.
- ^ "Java 7 and Java 8 Releases by Date". www.java.com.
- ^ "Windows XP and Java". Java.com. April 8, 2014. Retrieved February 9, 2016.
- ^ "java - installing JDK8 on Windows XP - advapi32.dll error". Stack Overflow.
- ^ "Oracle JDK 8 and JRE 8 Certified System Configurations". www.oracle.com.
- Waylandmode is unsupported.
- ^ "Oracle Java SE Support Roadmap". Oracle Corporation. September 25, 2018. Retrieved September 25, 2018.
- ^ "JDK 11". Oracle Corporation. September 25, 2018. Retrieved September 26, 2018.
- ^ "JDK 12". OpenJDK. Retrieved March 22, 2019.
- ^ "JDK 13". OpenJDK. Retrieved September 17, 2019.
- ^ "JDK 14". OpenJDK. Retrieved March 25, 2020.
- ^ "Deprecated List (Java SE 22)". cr.openjdk.org. Retrieved April 16, 2024.
- ^ "Remove Thread.countStackFrames". bugs.openjdk.org. Retrieved April 16, 2024.
- ^ "Java SE 22 ( JSR 397)". cr.openjdk.org. Retrieved April 16, 2024.
- ^ "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.
- ^ "Java - Fedora Project Wiki". fedoraproject.org.
- ^ Topic, Dalibor (January 27, 2016). "Moving to a plugin-free web". Oracle.
- ^ "Duke, the Java Mascot". Oracle. Retrieved March 18, 2019.
- ^ "duke: Project Home Page". Sun Microsystems. Archived from the original on June 18, 2007. Retrieved March 18, 2007.
- ^ "Duke, the Java Mascot".
- ^ "Future Tech Duke (The Java Source)". Tori Wieldt. Archived from the original on August 20, 2011. Retrieved August 17, 2011.
- ^ Smith, Donald (September 11, 2018). "Oracle JDK Releases for Java 11 and Later".
- ^ Stallman, Richard (May 24, 2006). "The Curious Incident of Sun in the Night-Time". Groklaw.
- ^ Schwartz, Jonathan. "?". Jonathan Schwartz's Blog. Sun Microsystems. Archived from the original on July 15, 2006.
- ^ "Oracle OpenWorld: UnBreakable Linux / 5015.2 not on the horizon | Formtek Blog". Formtek.com. October 26, 2006. Retrieved February 9, 2016.
- ^ "Oracle and Sun Microsystems | Strategic Acquisitions | Oracle". Sun.com. Retrieved February 9, 2016.
- ^ "Free but Shackled – The Java Trap – GNU Project – Free Software Foundation". Gnu.org. April 12, 2004. Retrieved February 9, 2016.
- ^ "Sun 'releases' Java to the World". BBC News. November 13, 2006. Retrieved May 6, 2010.
- ^ "Open JDK is here!". Sun Microsystems. May 8, 2007. Retrieved May 9, 2007.
- ^ Wielaard, Mark (May 30, 2007). "OpenJDK6 b10 source posted". Retrieved July 12, 2008.
- ^ "Redhat Java".
- ^ "Fedora Java".
- ^ "Debian Java".
- ^ "Ubuntu Java".
- ^ Sharples, Rich (June 19, 2008). "Java is finally Free and Open". Archived from the original on June 20, 2008.
- ^ libgdx (December 9, 2013). "Bundling a jre · libgdx/libgdx Wiki · GitHub". Github.com. Retrieved February 9, 2016.
- ^ "Question about bundling custom OpenJDK". Java-Gaming.org. Archived from the original on March 4, 2016. Retrieved February 9, 2016.
- ^ 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.
- ^ "Generics in Java". Object Computing, Inc. Archived from the original on January 2, 2007. Retrieved December 9, 2006.
- ^ "What's Wrong With Java: Type Erasure". December 6, 2006. Archived from the original on July 22, 2012. Retrieved December 9, 2006.
- ^ "Java and Scala's Type Systems are Unsound" (PDF).
- ^ "Java libraries should provide support for unsigned integer arithmetic". Bug Database, Sun Developer Network. Oracle. Retrieved January 18, 2011.
- ^ 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.
- ^ Kahan, W.; Darcy, Joseph D. (March 1, 1998). "How Java's Floating-Point Hurts Everyone Everywhere" (PDF). Retrieved December 9, 2006.
- ^ "Types, Values, and Variables". Sun Microsystems. Retrieved December 9, 2006.
- ^ "Which programming languages are fastest?". Computer Language Benchmarks Game. Archived from the original on August 14, 2011.
- ^ "speed ÷ C++ GNU g++ speed". Computer Language Benchmarks Game. Archived from the original on September 26, 2011.
- ^ "C++ vs Java performance; It's a tie! | Blog of Christian Felde". Blog.cfelde.com. June 27, 2010. Retrieved February 9, 2016.
- ^ "Java Security Architecture: Contents". Docs.oracle.com. October 2, 1998. Retrieved February 9, 2016.
- ^ 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.
- ^ Brook, Chris. "The first stop for security news". Threatpost. Archived from the original on March 8, 2013. Retrieved February 9, 2016.
- ^ "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.
- ^ "US Department of Homeland Security Calls On Computer Users To Disable Java". Forbes.com. Retrieved February 9, 2016.
- ^ Brook, Chris. "The first stop for security news". Threatpost. Archived from the original on April 9, 2013. Retrieved February 9, 2016.
- ^ "Critical Patch Updates and Security Alerts". Oracle.com. Retrieved February 9, 2016.
- ^ Finkle, Jim (January 14, 2013). "Emergency patch for Java fails to fix cybercrime holes, warn experts". Independent.ie. Retrieved February 9, 2016.
- ^ Kelly, Meghan (January 14, 2013). "Oracle issues fix for Java exploit after DHS warns of its holes". VentureBeat. Retrieved February 9, 2016.
- ^ Krebs, Brian (February 16, 2016). "Good Riddance to Oracle's Java Plugin". KrebsOnSecurity.
- ^ Gonsalves, Antone (September 5, 2012). "Java Is No Longer Needed. Pull The Plug-In". ReadWrite. Wearable World.
- ^ "Java: should you remove it?". The Guardian. February 8, 2013.
- ^ Bott, Ed. "A close look at how Oracle installs deceptive software with Java updates". ZDNet.com. ZDNet. Retrieved December 14, 2014.
- ^ "windows 7 - How do I update Java from a non-admin account?". Super User.
- ^ "Update Google Chrome - Computer - Google Chrome Help". support.google.com.
- ^ "Adobe Security Bulletin". helpx.adobe.com.
External links
- "How The JVM Spec Came To Be". infoq.com. – Presentation by James Gosling about the origins of Java, from the JVM Languages Summit 2008
- Java forums organization
- Java Introduction, May 14, 2014, Java77 Blog