The JDK is the Java Development Kit, the full-featured SDK for Java. It has everything the JRE has, but also the compiler (javac) and tools (like javadoc and jdb). It is capable of creating and compiling programs.

Sometimes, even if you are not planning to do any Java development on a computer, you still need the JDK installed. For example, if you are deploying a web application with JSP, you are technically just running Java programs inside the application server. Why would you need the JDK then? Because the application server will convert JSP into Java servlets and needs to use the JDK to compile the servlets.

For full information and terms, refer to the OTN License Agreement for Java SE. The OTN License Agreement for Java SE for current Oracle Java SE releases allows them to be used, without cost:

  • (i) For personal use on a desktop or laptop computer, such as to play games or run other personal applications.
  • (ii) For development, testing, prototyping, and demonstrating applications, including to use by/with profilers, debuggers, and Integrated Development Environment tools.
  • (iii) For use with some approved products, such as Oracle SQL Developer, or as an end user of a software application created by an approved product. (referred to as "Schedule A" and "Schedule B" Products in the OTN License Agreement for Java SE)
  • (iv) With identified Oracle Cloud Infrastructure products.

The new Oracle Technology Network License Agreement for Oracle Java SE is substantially different from prior Oracle JDK licenses. The new license permits certain uses, such as personal use and development use, at no cost – but other uses authorized under prior Oracle JDK licenses may no longer be available.

The latest version of Java is Java 23 or JDK 23 released on September 2024. However, many versions of Java are actively maintained for compatibility purposes. Java 8, Java 11, Java 17 and Java 21 are the four long-term support versions recommended by Oracle alongside the latest release. You can download the version you need below:

Java 8 is the last free software public update for commercial use, which explains why it remains popular even though it was released back in 2014. Oracle plans to maintain it until at least 2030. Also, you should know that some applications might refer to Java 8 as version 1.8.0.

What is Java?

Java is a programming language and software platform. Examples of applications that use Java are numerous and widespread but include web browsers, office applications and even mainstream games like Minecraft are based on Java.

What is Java JRE?

The Java Runtime Environment or JRE contains everything required to run Java applications on your system. The JRE software package includes the Java Virtual Machine (JVM), the Java Class Library, the Java command, and other infrastructure. JRE cannot be used to create new programs.

What is Java JDK?

The Java Development Kit (JDK) is the full-featured software development kit for Java developers. It has everything the JRE has, but adds the compiler (javac) and tools (like javadoc and jdb). The JDK allows you to create and compile Java programs.

Do I need Java JRE or Java JDK?

Unless you are a software developer, you only need to install Java JRE in your system to run Java programs. On the other hand, if you are planning to do some Java programming, you need to install the JDK instead.

Sometimes, even if you are not planning to do any Java programming, you still need the JDK installed. For example, if you are deploying a web application with JSP, you are technically just running Java programs inside the application server. Why would you need the JDK then? Because the application server will convert JSP into Java servlets and needs to use the JDK to compile the servlets.

Is Java free to use?

Yes, Java is free to use under the jdk.java.net license. This means anyone can download it for personal or development use at no cost. Oracle does charge for long term support, but this is optional.

What popular apps use Java?

As the fifth most popular programming language in the world, there is a long list of popular apps that rely on Java. From games like Minecraft and RuneScape, services like Netflix, Spotify and Uber, and applications like Opera Mini have all been created using Java.

What's New

The full version string for this update release is 17.0.12+8 (where "+" means "build"). The version number is 17.0.12.

New Features

security-libs/java.security

  • ➜ New Security Category for -XshowSettings Launcher Option (JDK-8281658)

The -XshowSettings launcher has a new security category. Settings from security properties, security providers and TLS related settings are displayed with this option. A security sub-category can be passed as an argument to the security category option.

Bug Fixes

  • JDK-8318854 - client-libs/java.awt - [macos14] Any AWT application displays a Secure coding warning when run. JDK-8317771 - client-libs/javax.accessibility - [macos14] Using the keyboard to expand/collapse a JTree causes the application to freeze in macOS 14 Sonoma.
  • JDK-8296878 - client-libs/javax.swing - The Document Filter linked to JPasswordField and setText("") does not clear; instead, inserted characters are replaced with unicode null characters.
  • JDK-8322239 - client-libs/javax.swing - [macos] a11y: java.lang.NullPointerException is thrown when focus shifts to the JTabbedPane.
  • JDK-8187759 - client-libs/javax.swing - The background does not refresh when painting over a transparent JFrame.
  • JDK-8320570 - core-libs/java.lang - A NegativeArraySizeException occurs while decoding more than 1G UTF8 bytes containing non-ASCII characters.
  • JDK-8302791 - core-libs/java.lang:class_loading - A specific ClassLoader object should be added to the Proxy IllegalArgumentException message.
  • JDK-8319436 - core-libs/java.lang:reflect - Proxy.newProxyInstance throws a NullPointerException if the loader is null and the interface is not visible from the class loader.
  • JDK-8306040 - core-libs/java.net - HttpResponseInputStream.available() returns 1 when the stream is empty.
  • JDK-8318599 - core-libs/java.net - HttpURLConnection faces caching issues that lead to crashes in JGSS with native GSS introduced by 8303809.
  • JDK-8292044 - core-libs/java.net - HttpClient does not handle 102 or 103 responses correctly.
  • JDK-8263940 - core-libs/java.nio - A NullPointerException occurs when creating the default file system if the default file system provider is packaged as a JAR file on the class path.
  • JDK-8280113 - core-libs/java.nio - (dc) DatagramSocket.receive does not consistently throw an exception when the channel is closed.
  • JDK-8318322 - core-libs/java.util:i18n - IANA Language Subtag Registry updated to Version 2023-10-16.
  • JDK-8304761 - core-libs/java.util:i18n - IANA Language Subtag Registry updated to Version 2023-03-22.
  • JDK-8302512 - core-libs/java.util:i18n - IANA Language Subtag Registry updated to Version 2023-02-14.
  • JDK-8306031 - core-libs/java.util:i18n - IANA Language Subtag Registry updated to Version 2023-04-13.
  • JDK-8308021 - core-libs/java.util:i18n - IANA Language Subtag Registry updated to Version 2023-05-11.
  • JDK-8327631 - core-libs/java.util:i18n - IANA Language Subtag Registry updated to Version 2024-03-07.
  • JDK-8313702 - core-libs/java.util:i18n - IANA Language Subtag Registry updated to Version 2023-08-02.
  • JDK-8321599 - hotspot/compiler - Data loss occurs during AVX3 Base64 decoding.
  • JDK-8310844 - hotspot/compiler - [C1 compilation fails on AArch64 due to monitor offset in OSR buffer being too large for immediate.
  • JDK-8324050 - hotspot/compiler - An issue with the store-store barrier arises after re-materializing objects during deoptimization.
  • JDK-8326638 - hotspot/compiler - A crash occurs in PhaseIdealLoop::remix_address_expressions due to an unexpected Region instead of Loop.
  • JDK-8319372 - hotspot/compiler - C2 compilation fails with "Bad immediate dominator info."
  • JDK-8282414 - hotspot/compiler - x86: The assembler is enhanced to generate more compact instructions.
  • JDK-8298129 - hotspot/jfr - Checkpoint event sizes are allowed to exceed the u4 limit.
  • JDK-8298649 - hotspot/jfr - JFR: RemoteRecordingStream supports checkpoint event sizes beyond u4.
  • JDK-8286740 - hotspot/jfr - JFR: Active Setting event is emitted incorrectly.
  • JDK-8326106 - hotspot/jfr - The stack trace table is written and cleared outside of the safepoint.
  • JDK-8298472 - hotspot/runtime - AArch64: Ampere-1 and Ampere-1A CPUs are detected, and default options are set.
  • JDK-8278241 - hotspot/runtime - JVM SpinPause is implemented on linux-aarch64.
  • JDK-8296437 - hotspot/runtime - NMT incurs costs when disabled.
  • JDK-8327036 - hotspot/runtime - [macosx-aarch64] SIGBUS occurs in MarkActivationClosure::do_code_blob reached from Unsafe_CopySwapMemory0.
  • JDK-8319048 - hotspot/runtime - The monitor deflation unlink phase extends the time to reach a safepoint.
  • JDK-8324933 - hotspot/runtime - ConcurrentHashTable::statistics_calculate synchronization is costly.
  • JDK-8296343 - security-libs/java.security - CPVE is thrown when content-length is missing in the OCSP response.
  • JDK-8326643 - security-libs/java.security - The JDK server fails to send a dummy change_cipher_spec record after the HelloRetryRequest message.
  • JDK-8312383 - security-libs/javax.net.ssl - The implementation class name of X509ExtendedKeyManager is logged in TLS/SSL connections.
  • JDK-8303809 - security-libs/org.ietf.jgss - The context is disposed of in SPNEGO NegotiatorImpl.
  • JDK-8294699 - tools/jpackage - The launcher causes a persistent busy cursor.
  • JDK-8325203 - tools/jpackage - System.exit(0) terminates the launched third-party application.