본문 바로가기

프로그래밍/Java

[Java] JDK 버전별 차이점 정리 (1.5~17)

2021년 11월 26일에 작성된 글입니다.

JDK 1.5

추가된 기능

  • Generic
  • Metadata
  • Autoboxing/unboxing
  • Enumerations
  • Varargs
  • Enhanced for each loop
  • Improved semantics of execution for multi-threaded Java programs
  • Static imports

표준 라이브러리 개선

  • Automatic stub generation for RMI objects
  • Swing
  • The concurrency utilities in package java.util.concurrent
  • Scanner class for parsing data from various input streams and buffers

JDK 1.6

  • Support for older Win9x versions dropped
  • Scripting Language Support
  • Dramatic performance improvements for the core platform, and Swing.
  • Improved Web Service support through JAX-WS.
  • JDBC 4.0 support.
  • Java Compiler API
  • Upgrade of JAXB to version 2.0: Including integration of a StAX parser.
  • Support for pluggable annotations.
  • Many GUI improvements, such as integration of SwingWorker in the API, table sorting and filtering, and true Swing double-buffering (eliminating the gray-area effect).
  • JVM improvements include: synchronization and compiler performance optimizations, new algorithms and upgrades to existing garbage collection algorithms, and application start-up performance.

JDK 1.7

  • JVM support for dynamic languages, with the new invokedynamic bytecode under JSR-292, following the prototyping work currently done on the Multi Language Virtual Machine
  • Compressed 64-bit pointers (available in Java 6 with -XX:+UseCompressedOops)
  • These small language changes (grouped under a project named Coin):
    • Strings in switch
    • Automatic resource management in try-statement
    • Improved type inference for generic instance creation, aka the diamond operator <>
    • Simplified varargs method declaration
    • Binary integer literals
    • Allowing underscores in numeric literals
    • Catching multiple exception types and rethrowing exceptions with improved type checking
  • Concurrency utilities under JSR 166
  • New file I/O library (defined by JSR 203) adding support for multiple file systems, file metadata and symbolic links. The new packages are java.nio.file, java.nio.file.attribute and java.nio.file.spi
  • Timsort is used to sort collections and arrays of objects instead of merge sort
  • Library-level support for elliptic curve cryptography algorithms
  • An XRender pipeline for Java 2D, which improves handling of features specific to modern GPUs
  • New platform APIs for the graphics features originally implemented in version 6u10 as unsupported APIs
  • Enhanced library-level support for new network protocols, including SCTP and Sockets Direct Protocol
  • Upstream updates to XML and Unicode
  • Java deployment rule sets

JDK 1.8

  • Language-level support for lambda expressions
  • default methods (virtual extension methods) which allow the addition of methods to interfaces without breaking existing implementations
  • a JavaScript runtime which allows developers to embed JavaScript code within applications
  • Annotation on Java types
  • Unsigned integer arithmetic
  • Repeating annotations
  • Date and time API
  • Statically-linked JNI libraries
  • Launch JavaFX applications (direct launching of JavaFX application JARs)
  • Remove the permanent generation

JDK 9

  • Modularization of the JDK under Project Jigsaw (Java Platform Module System)
  • JavaDB was removed from JDK
  • Variable handles
  • Milling Project Coin : Allow @SafeVarargs on private instance methods; Allow effectively-final variables to be used as resources in the try-with-resources statement; Allow diamond with anonymous classes if the argument type of the inferred type is denotable; Complete the removal, begun in Java SE 8, of underscore from the set of legal identifier names; Support for private methods in interfaces
  • jshell: The Java Shell (Read-Eval-Print Loop) : JShell is a REPL command-line interface for the Java language.
  • Compact Strings
  • HiDPI graphics: automatic scaling and sizing
  • More concurrency updates : It includes a Java implementation of Reactive Streams, including a new Flow class that included the interfaces previously provided by Reactive Streams
  • XML catalogs
  • jlink: The Java Linker : create a tool that can assemble and optimize a set of modules and their dependencies into a custom run-time image. It effectively allows to produce a fully usable executable including the JVM to run it
  • Ahead-of-Time Compilation : Ahead-of-time compilation provided by GraalVM.

JDK 10

  • Local-Variable Type Inference
  • Consolidate the JDK Forest into a Single Repository
  • Garbage-Collector Interface
  • Parallel Full GC for G1
  • Application Class-Data Sharing
  • Thread-Local Handshakes
  • Remove the Native-Header Generation Tool (javah)
  • Additional Unicode Language-Tag Extensions
  • Heap Allocation on Alternative Memory Devices
  • Experimental Java-Based JIT Compiler
  • Root Certificates
  • Time-Based Release Versioning

JDK 11

  • Nest-Based Access Control
  • Dynamic Class-File Constants
  • Improve Aarch64 Intrinsics
  • Epsilon: A No-Op Garbage Collector
  • Remove the Java EE and CORBA Modules
  • HTTP Client (Standard)
  • Local-Variable Syntax for Lambda Parameters
  • Key Agreement with Curve25519 and Curve448
  • Unicode 10
  • Flight Recorder
  • ChaCha20 and Poly1305 Cryptographic Algorithms
  • Launch Single-File Source-Code Programs
  • Low-Overhead Heap Profiling
  • Transport Layer Security (TLS) 1.3
  • ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
  • Deprecate the Nashorn JavaScript Engine
  • Deprecate the Pack200 Tools and API

JDK 12

  • Shenandoah: A Low-Pause-Time Garbage Collector (Experimental)
  • Microbenchmark Suite
  • Switch Expressions (Preview)
  • JVM Constants API
  • One AArch64 Port, Not Two
  • Default CDS Archives
  • Abortable Mixed Collections for G1
  • Promptly Return Unused Committed Memory from G1

JDK 13

  • Dynamic CDS Archives
  • ZGC: Uncommit Unused Memory
  • Reimplement the Legacy Socket API
  • Switch Expressions (Second Preview)
  • Text Blocks (Preview)

JDK 14

  • Pattern Matching for instanceof (Preview)
  • Packaging Tool (Incubator)
  • NUMA-Aware Memory Allocation for G1
  • JFR Event Streaming
  • Non-Volatile Mapped Byte Buffers
  • Helpful NullPointerExceptions
  • Records (Preview)
  • Switch Expressions (Standard)
  • Deprecate the Solaris and SPARC Ports
  • Remove the Concurrent Mark Sweep (CMS) Garbage Collector
  • ZGC on macOS
  • ZGC on Windows
  • Deprecate the ParallelScavenge + SerialOld GC Combination
  • Remove the Pack200 Tools and API
  • Text Blocks (Second Preview)
  • Foreign-Memory Access API (Incubator)

JDK 15

  • Edwards-Curve Digital Signature Algorithm (EdDSA)
  • Sealed Classes (Preview)
  • Hidden Classes
  • Remove the Nashorn JavaScript Engine
  • Reimplement the Legacy DatagramSocket API
  • Disable and Deprecate Biased Locking
  • Pattern Matching for instanceof (Second Preview)
  • ZGC: A Scalable Low-Latency Garbage Collector
  • Text Blocks
  • Shenandoah: A Low-Pause-Time Garbage Collector
  • Remove the Solaris and SPARC Ports
  • Foreign-Memory Access API (Second Incubator)
  • Records (Second Preview)
  • Deprecate RMI Activation for Removal

JDK 16

  • Vector API (Incubator)
  • Enable C++14 Language Features
  • Migrate from Mercurial to Git
  • Migrate to GitHub
  • ZGC: Concurrent Thread-Stack Processing
  • Unix-Domain Socket Channels
  • Alpine Linux Port – not yet stable
  • Elastic Metaspace
  • Windows/AArch64 Port
  • Foreign Linker API (Incubator)
  • Warnings for Value-Based Classes
  • Packaging Tool
  • Foreign-Memory Access API (Third Incubator)
  • Pattern Matching for instanceof
  • Records
  • Strongly Encapsulate JDK Internals by Default
  • Sealed Classes (Second Preview)

JDK 17

  • Restore Always-Strict Floating-Point Semantics
  • Enhanced Pseudo-Random Number Generators
  • New macOS Rendering Pipeline
  • macOS/AArch64 Port
  • Deprecate the Applet API for Removal
  • Strongly Encapsulate JDK Internals
  • Pattern Matching for switch (Preview)
  • Remove RMI Activation
  • Sealed Classes
  • Remove the Experimental AOT and JIT Compiler
  • Deprecate the Security Manager for Removal
  • Foreign Function & Memory API (Incubator)
  • Vector API (Second Incubator)
  • Context-Specific Deserialization Filters
참고 자료

'프로그래밍 > Java' 카테고리의 다른 글

[Java] Pattern Matching for instanceof  (0) 2024.09.04
[Java] Switch Expression  (0) 2024.09.04
[Java] 레코드(Record)  (0) 2024.09.04