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 20 or JDK 20. However, many versions of Java are actively maintained for compatibility purposes. Java 8, Java 11 and Java 17 are the three long-term support versions recommended by Oracle. 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. 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.7+8 (where "+" means "build"). The version number is 17.0.7.

IANA TZ Data 2022g

JDK 17.0.7 contains IANA time zone data 2022g which contains the following changes:

  • The northern edge of Chihuahua changes to US timekeeping.
  • Much of Greenland stops changing clocks after March 2023.
  • Fix some pre-1996 timestamps in northern Canada.
  • C89 is now deprecated; please use C99 or later.
  • Portability fixes for AIX, libintl, MS-Windows, musl, z/OS.
  • In C code, use more C23 features if available.
  • C23 timegm now supported by default.
  • Fixes for unlikely integer overflows.

New Features

security-libs/java.security

â New JFR Event: jdk.InitialSecurityProperty (JDK-8292177)

A new Java Flight Recorder (JFR) event has been added to record details of initial security properties when loaded via the java.security.Security class.

security-libs/javax.net.ssl

â DTLS Resumption Uses HelloVerifyRequest Messages (JDK-8287411 (not public))

With this fix the SunJSSE DTLS implementation will by default exchange cookies for all handshakes (new and resumed) unless the System property jdk.tls.enableDtlsResumeCookie is false. The property only affects the cookie exchange for resumption.

security-libs/java.security

â Support for RSASSA-PSS in OCSP Response (JDK-8274471)

An OCSP response signed with the RSASSA-PSS algorithm is now supported.

Bug Fixes

This release also contains fixes for security vulnerabilities described in the Oracle Critical Patch Update.

â Issues fixed in 17.0.7:

  • JDK-8282577 client-libs/2d ICC_Profile.setData(int, byte[]) invalidates the profile
  • JDK-8285399 client-libs/2d JNI exception pending in awt_GraphicsEnv.c:1432
  • JDK-8284023 client-libs/java.awt java.sun.awt.X11GraphicsDevice.getDoubleBufferVisuals() leaks XdbeScreenVisualInfo
  • JDK-8296496 client-libs/java.awt Overzealous check in sizecalc.h prevents large memory allocation
  • JDK-8279614 client-libs/java.awt The left line of the TitledBorder is not painted on 150 scale factor
  • JDK-8288332 client-libs/java.awt Tier1 validate-source fails after 8279614
  • JDK-8295685 client-libs/java.awt Update Libpng to 1.6.38
  • JDK-8292948 client-libs/javax.swing JEditorPane ignores font-size styles in external linked css-file
  • JDK-8282958 client-libs/javax.swing Rendering Issues with Borders on Windows High-DPI systems
  • JDK-8294378 core-libs/java.net URLPermission constructor exception when using tr locale
  • JDK-8297569 core-libs/java.net URLPermission constructor throws IllegalArgumentException: Invalid characters in hostname after JDK-8294378
  • JDK-8299439 core-libs/java.text java/text/Format/NumberFormat/CurrencyFormat.java fails for hr_HR
  • JDK-8295530 core-libs/java.util.jar Update Zlib Data Compression Library to Version 1.2.13
  • JDK-8287180 core-libs/java.util:i18n Update IANA Language Subtag Registry to Version 2022-08-08
  • JDK-8267038 core-libs/java.util:i18n Update IANA Language Subtag Registry to Version 2022-03-02
  • JDK-8296239 core-libs/java.util:i18n ISO 4217 Amendment 174 Update
  • JDK-8292778 core-svc/java.lang.instrument EncodingSupport_md.c convertUtf8ToPlatformString wrong placing of free
  • JDK-8292541 core-svc/java.lang.management [Metrics] Reported memory limit may exceed physical machine memory
  • JDK-8297656 performance/hotspot AArch64: Enable AES/GCM Intrinsics
  • JDK-8268276 hotspot/compiler Base64 Decoding optimization for x86 using AVX-512
  • JDK-8269404 hotspot/compiler Base64 Encoding optimization enhancements for x86 using AVX-512
  • JDK-8273108 hotspot/compiler RunThese24H crashes with SEGV in markWord::displaced_mark_helper() after JDK-8268276
  • JDK-8273459 hotspot/compiler Update code segment alignment to 64 bytes
  • JDK-8296958 hotspot/compiler [JVMCI] add API for retrieving ConstantValue attributes
  • JDK-8296961 hotspot/compiler [JVMCI] Access to j.l.r.Method/Constructor/Field for ResolvedJavaMethod/ResolvedJavaField
  • JDK-8296960 hotspot/compiler [JVMCI] list HotSpotConstantPool.loadReferencedType to ConstantPool
  • JDK-8296967 hotspot/compiler [JVMCI] rationalize relationship between getCodeSize and getCode in ResolvedJavaMethod
  • JDK-8282528 hotspot/compiler AArch64: Incorrect replicate2L_zero rule
  • JDK-8277137 hotspot/compiler Set OnSpinWaitInst/OnSpinWaitInstCount defaults to "isb"/1 for Arm Neoverse N1
  • JDK-8294902 hotspot/compiler Undefined Behavior in C2 regalloc with null references
  • JDK-8290322 hotspot/compiler Optimize Vector.rearrange over byte vectors for AVX512BW targets.
  • JDK-8295066 hotspot/compiler Folding of loads is broken in C2 after JDK-8242115
  • JDK-8296912 hotspot/compiler C2: CreateExNode::Identity fails with assert(i < _max) failed: oob: i=1, _max=1
  • JDK-8294538 hotspot/compiler missing is_unloading() check in SharedRuntime::fixup_callers_callsite()
  • JDK-8292602 hotspot/compiler ZGC: C2 late barrier analysis uses invalid dominator information
  • JDK-8292660 hotspot/compiler C2: blocks made unreachable by NeverBranch-to-Goto conversion are removed incorrectly
  • JDK-8292285 hotspot/compiler C2: remove unreachable block after NeverBranch-to-Goto conversion
  • JDK-8290964 hotspot/compiler C2 compilation fails with assert "non-reduction loop contains reduction nodes"
  • JDK-8281122 hotspot/compiler [IR Framework] Cleanup IR matching code in preparation for JDK-8280378
  • JDK-8276064 hotspot/compiler CheckCastPP with raw oop input floats below a safepoint
  • JDK-8296924 hotspot/compiler C2: assert(is_valid_AArch64_address(dest.target())) failed: bad address
  • JDK-8290850 hotspot/compiler C2: create_new_if_for_predicate() does not clone pinned phi input nodes resulting in a broken graph
  • JDK-8297431 hotspot/compiler [JVMCI] HotSpotJVMCIRuntime.encodeThrowable should not throw an exception
  • JDK-8285835 hotspot/compiler SIGSEGV in PhaseIdealLoop::build_loop_late_post_work
  • JDK-8295788 hotspot/compiler C2 compilation hits "assert((mode == ControlAroundStripMined && use == sfpt) || !use->is_reachable_from_root()) failed: missed a node"
  • JDK-8297951 hotspot/compiler C2: Create skeleton predicates for all If nodes in loop predication
  • JDK-8297264 hotspot/compiler C2: Cast node is not processed again in CCP and keeps a wrong too narrow type which is later replaced by top
  • JDK-8295116 hotspot/compiler C2: assert(dead->outcnt() == 0 && !dead->is_top()) failed: node must be dead
  • JDK-8242115 hotspot/compiler C2 SATB barriers are not safepoint-safe
  • JDK-8292301 hotspot/compiler [REDO v2] C2 crash when allocating array of size too large
  • JDK-8296136 hotspot/compiler Use correct register in aarch64_enc_fast_unlock()
  • JDK-8296389 hotspot/compiler C2: PhaseCFG::convert_NeverBranch_to_Goto must handle both orders of successors
  • JDK-8272985 hotspot/gc Reference discovery is confused about atomicity and degree of parallelism
  • JDK-8296733 hotspot/jfr JFR: File Read event for RandomAccessFile::write(byte[]) is incorrect
  • JDK-8283199 hotspot/runtime Linux os::cpu_microcode_revision() stalls cold startup
  • JDK-8271506 hotspot/runtime Add ResourceHashtable support for deleting selected entries
  • JDK-8294160 hotspot/runtime misc crash dump improvements
  • JDK-8048190 hotspot/runtime NoClassDefFoundError omits original ExceptionInInitializerError
  • JDK-8293472 hotspot/runtime Incorrect container resource limit detection if manual cgroup fs mounts present
  • JDK-8287011 hotspot/runtime Improve container information
  • JDK-8286030 hotspot/runtime Avoid JVM crash when containers share the same /tmp dir
  • JDK-8262386 hotspot/svc-agent resourcehogs/serviceability/sa/TestHeapDumpForLargeArray.java timed out
  • JDK-8297918 infrastructure Remove platform dependency in corelibs-atr and langtools-atr task definition files
  • JDK-8298349 install/install /usr/java/latest points to wrong JDK
  • JDK-8298330 install/install /usr/java/latest is missing after one of JDK rpms is uninstalled
  • JDK-8280890 security-libs/java.security Cannot use '-Djava.system.class.loader' with class loader in signed JAR
  • JDK-8292297 security-libs/java.security Fix up loading of override java.security properties file
  • JDK-8293701 core-svc/tools jdeps InverseDepsAnalyzer runs into NoSuchElementException: No value present
  • DK-8296619 tools/javadoc(tool) Upgrade jQuery to 3.6.1
  • ment.normalizeDocument() produces different results