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.

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.

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.

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.6+9 (where "+" means "build"). The version number is 17.0.6

IANA TZ Data 2022d, 2022e, 2022f

JDK 17.0.6 contains IANA time zone data 2022d, 2022e, 2022f.

  • Palestine transitions are now Saturdays at 02:00.
  • Simplify three Ukraine zones into one.
  • Jordan and Syria switch from +02/+03 with DST to year-round +03.
  • Mexico will no longer observe DST except near the US border.
  • Chihuahua moves to year-round -06 on 2022-10-30.
  • Fiji no longer observes DST.
  • Move links to 'backward'.
  • In vanguard form, GMT is now a Zone and Etc/GMT a link.
  • zic now supports links to links, and vanguard form uses this.
  • Simplify four Ontario zones.
  • Fix a Y2438 bug when reading TZif data.
  • Enable 64-bit time_t on 32-bit glibc platforms.
  • Omit large-file support when no longer needed.
  • In C code, use some C23 features if available.
  • Remove no-longer-needed workaround for Qt bug 53071.

New Features

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.6:

  • 1 JDK-8295429 client-libs Update harfbuzz md file
  • 2 JDK-8293672 client-libs Update freetype md file
  • 3 JDK-8289697 client-libs/2d buffer overflow in MTLVertexCache.m: MTLVertexCache_AddGlyphQuad
  • 4 JDK-8240756 client-libs/2d [macos] SwingSet2:TableDemo:Printed Japanese characters were garbled
  • 5 JDK-8284033 client-libs/java.awt Leak XVisualInfo in getAllConfigs in awt_GraphicsEnv.c
  • 6 JDK-8273655 core-libs/java.net content-types.properties files are missing some common types
  • 7 JDK-8272352 core-libs/java.util:i18n Java launcher can not parse Chinese character when system locale is set to UTF-8
  • 8 JDK-8294307 core-libs/java.util:i18n ISO 4217 Amendment 173 Update
  • 9 JDK-8293657 core-svc/javax.management sun/management/jmxremote/bootstrap/RmiBootstrapTest.java#id1 failed with "SSLHandshakeException: Remote host terminated the handshake"
  • 10 JDK-8293319 hotspot/compiler [C2 cleanup] Remove unused other_path arg in Parse::adjust_map_after_if
  • 11 JDK-8280511 hotspot/compiler AArch64: Combine shift and negate to a single instruction
  • 12 JDK-8276108 hotspot/compiler Wrong instruction generation in aarch64 backend
  • 13 JDK-8251216 hotspot/compiler Implement MD5 intrinsics on AArch64
  • 14 JDK-8186670 hotspot/compiler Implement _onSpinWait() intrinsic for AArch64
  • 15 JDK-8290781 hotspot/compiler Segfault at PhaseIdealLoop::clone_loop_handle_data_uses
  • 16 JDK-8282347 hotspot/compiler AARCH64: Untaken branch in has_negatives stub
  • 17 JDK-8282049 hotspot/compiler AArch64: Use ZR for integer zero immediate volatile stores
  • 18 JDK-8291775 hotspot/compiler C2: assert(r != __null && r->is_Region()) failed: this phi must have a region
  • 19 JDK-8290711 hotspot/compiler assert(false) failed: infinite loop in PhaseIterGVN::optimize
  • 20 JDK-8287349 hotspot/compiler AArch64: Merge LDR instructions to improve C1 OSR performance
  • 21 JDK-8277411 hotspot/compiler C2 fast_unlock intrinsic on AArch64 has unnecessary ownership check
  • 22 JDK-8277358 hotspot/compiler Accelerate CRC32-C
  • 23 JDK-8291599 hotspot/compiler Assertion in PhaseIdealLoop::skeleton_predicate_has_opaque after JDK-8289127
  • 24 JDK-8290705 hotspot/compiler StringConcat::validate_mem_flow asserts with "unexpected user: StoreI"
  • 25 JDK-8290529 hotspot/compiler C2: assert(BoolTest(btest).is_canonical()) failure
  • 26 JDK-8288445 hotspot/compiler AArch64: C2 compilation fails with guarantee(!true || (true && (shift != 0))) failed: impossible encoding
  • 27 JDK-8280872 hotspot/compiler Reorder code cache segments to improve code density
  • 28 JDK-8272094 hotspot/compiler compiler/codecache/TestStressCodeBuffers.java crashes with "failed to allocate space for trampoline"
  • 29 JDK-8293816 hotspot/compiler CI: ciBytecodeStream::get_klass() is not consistent
  • 30 JDK-8293044 hotspot/compiler C1: Missing access check on non-accessible class
  • 31 JDK-8292158 hotspot/compiler AES-CTR cipher state corruption with AVX-512
  • 32 JDK-8270947 hotspot/compiler AArch64: C1: use zero_words to initialize all objects
  • 33 JDK-8287425 hotspot/compiler Remove unnecessary register push for MacroAssembler::check_klass_subtype_slow_path
  • 34 JDK-8290451 hotspot/compiler Incorrect result when switching to C2 OSR compilation from C1
  • 35 JDK-8268779 hotspot/gc ZGC: runtime/InternalApi/ThreadCpuTimesDeadlock.java#id1 failed with "OutOfMemoryError: Java heap space"
  • 36 JDK-8278389 hotspot/gc SuspendibleThreadSet::_suspend_all should be volatile/atomic
  • 37 JDK-8288754 hotspot/gc GCC 12 fails to build zReferenceProcessor.cpp
  • 38 JDK-8279398 hotspot/jfr jdk/jfr/api/recording/time/TestTimeMultiple.java failed with "RuntimeException: getStopTime() > afterStop"
  • 39 JDK-8268297 hotspot/jfr jdk/jfr/api/consumer/streaming/TestLatestEvent.java times out
  • 40 JDK-8291459 hotspot/runtime JVM crash with GenerateOopMap::error_work(char const*, __va_list_tag*)
  • 41 JDK-8292083 hotspot/runtime Detected container memory limit may exceed physical machine memory
  • 42 JDK-8293156 hotspot/svc Dcmd VM.classloaders fails to print the full hierarchy
  • 43 JDK-8257722 security-libs/java.security Improve "keytool -printcert -jarfile" output
  • 44 JDK-8273553 security-libs/javax.net.ssl sun.security.ssl.SSLEngineImpl.closeInbound also has similar error of JDK-8253368
  • 45 JDK-8276764 core-svc/tools Enable deterministic file content ordering for Jar and Jmod
  • 46 JDK-8276766 tools/jar Enable jar and jmod to produce deterministic timestamped content
  • 47 JDK-8293578 tools/javac Duplicate ldc generated by javac
  • 48 JDK-8266082 tools/javac AssertionError in Annotate.fromAnnotations with -Xdoclint
  • 49 JDK-8272776 tools/javac NullPointerException not reported
  • 50 JDK-8286444 tools/javac javac errors after JDK-8251329 are not helpful enough to find root cause
  • 51 JDK-8286855 tools/javac javac error on invalid jar should only print filename
  • 52 JDK-8287076 xml/org.w3c.dom Document.normalizeDocument() produces different results