문서의 이전 판입니다!
Java - version
- Oracle Roadmap - 2024-01-25 updated.
- Adaptium - Roadmap - 2024-01-25 updated.
- Azul Roadmap - 2024-01-25 updated.
- Amazon Corretto Faqs - 2024-01-25 updated.
- Redhat - OpenJDK Support - 2024-01-25 updated.
Java SE 25 2025.09 (LTS)
| 제공 | 지원종료 (확장) |
|---|---|
| Oracle | 2030. 09 (2033. 09) |
Javs SE 24 2025.03
| 제공 | 지원종료 (확장) |
|---|---|
| Oracle | 2025. 09 |
| Azul | 2025. 09 |
Javs SE 23 2024.09
| 제공 | 지원종료 (확장) |
|---|---|
| Oracle | 2025. 03 |
| Azul | 2025. 03 |
Java SE 22 2024.03
| 제공 | 지원종료 (확장) |
|---|---|
| Oracle | 2024. 09 |
| Eclipse Temurin | 2024. 09 |
| Azul | 2024. 09 |
Java SE 21 2023.09 (LTS)
| 제공 | 지원종료 (확장) |
|---|---|
| Oracle | 2028. 09 (2031. 09) |
| Eclipse Temurin | 2029. 10 |
| Azul | 2031. 09 |
| Amazon Corretto | 2023. 10 |
| Redhat | 2029. 11 |
- JEP 430: String Templates (Preview)
- JEP 431: Sequenced Collections
- JEP 439: Generational ZGC
- JEP 440:
record패턴(cf. Tuple) - JEP 441:
switch패턴 매칭 - JEP 442: Foreign Function & Memory API (Third Preview)
- JEP 443: 무명 패턴과 변수 (Preview)
- JEP 444: 가상 스레드(Virtual Threads)
- JEP 445: 메인 메소드의 무명 클래스와 인스턴스 (Preview)
- JEP 446: Scoped Values (Preview)
- JEP 448: Vector API (Sixth Incubator)
- JEP 449:
Windows 32-bit x86 Portdeprecated for Removal - JEP 451: Prepare to Disallow the Dynamic Loading of Agents
- JEP 452: Key Encapsulation Mechanism API
- JEP 453: 구조화된 동시성(Structured Concurrency) (Preview)
Java SE 20 2023.03
| 제공 | 지원종료 (확장) |
|---|---|
| | 2023. 09 |
| | 2023. 09 |
| | 2023. 09 |
| | 2023. 09 |
| | 2023. 10. |
- JEP 429: Scoped Values (Incubator)
- JEP 432: Record Patterns (Second Preview)
- JEP 433: Pattern Matching for switch (Fourth Preview)
- JEP 434: Foreign Function & Memory API (Second Preview)
- JEP 436: Virtual Threads (Second Preview)
- JEP 437: Structured Concurrency (Second Incubator)
- JEP 438: Vector API (Fifth Incubator)
Java SE 19 2022.09
| 제공 | 지원종료 (확장) |
|---|---|
| | 2023. 09 |
| | 2022. 09 |
| | 2023. 03 |
| | 2023. 09 |
| | 2023. 04 |
Java SE 18 2022.03
| 제공 | 지원종료 (확장) |
|---|---|
| | 2022. 09 |
| | 2022. 09 |
| | 2022. 09 |
| | 2022. 09 |
| | 2022. 10 |
- JEP 400: UTF-8이 기본
- JEP 408: Simple Web Server
- JEP 413: Code Snippets in Java API Documentation
- JEP 416: Reimplement Core Reflection with Method Handles
- JEP 417: Vector API (Third Incubator)
- JEP 418: Internet-Address Resolution SPI
- JEP 419: Foreign Function & Memory API (Second Incubator)
- JEP 420:
switch패턴 매칭 (Second Preview) - JEP 421:
Finalizationdeprecated
Java SE 17 2021.09 (LTS)
| 제공 | 지원종료 (확장) |
|---|---|
| Oracle | 2026. 09 (2029. 09) |
| OpenJDK | SAP 유지보수중 |
| Eclipse Temurin | 2027. 10 |
| Azul | 2029. 09 |
| Amazon Corretto | 2029. 10 |
| Red Hat | 2027. 10 |
| IBM Semeru | 2027. 10 |
| Microsoft | 2027. 09 |
- JEP 306: Restore Always-Strict Floating-Point Semantics
- JEP 356: Enhanced Pseudo-Random Number Generators
- JEP 382: New macOS Rendering Pipeline
- JEP 391: macOS/AArch64 Port
- JEP 398:
Applet APIdeprecated - JEP 403: Strongly Encapsulate JDK Internals
- JEP 406:
switch패턴 매칭 (Preview) - JEP 407:
RMI Activation제거 - JEP 409: 봉인된 클래스(
sealed) - JEP 411: Deprecate the
Security Managerfor Removal - JEP 412: Foreign Function & Memory API (Incubator)
- JEP 414: Vector API (Second Incubator)
- JEP 415: Context-Specific Deserialization Filters
Java SE 16 2021.03
| 제공 | 지원종료 (확장) |
|---|---|
| | 2021. 09 |
| | 2021. 09 |
| | 2021. 10 |
- JEP 338: 벡터 API (Incubator)
- JEP 347: C++14 언어 기능 활성화
- JEP 357: Mercurial에서 Git로 마이그레이션
- JEP 369: GitHub로 마이그레이션
- JEP 376: ZGC: Concurrent Thread-Stack Processing
- JEP 380: Unix-Domain Socket Channels
- JEP 386: Alpine Linux Port – not yet stable
- JEP 387: Elastic Metaspace
- JEP 388: Windows/AArch64 Port
- JEP 389: Foreign Linker API (Incubator)
- JEP 390: Warnings for Value-Based Classes
- JEP 392: 패키징 툴
- JEP 393: Foreign-Memory Access API (Third Incubator)
- JEP 394:
instanceof패턴 매칭 - JEP 395: Records (
record- cf. Tuple) - JEP 396: Strongly Encapsulate JDK Internals by Default
- JEP 397: Sealed Classes (Second Preview)
Java SE 15 2020.09
| 제공 | 지원종료 (확장) |
|---|---|
| | 2021. 03 |
| | 2023. 03 |
| | 2021. 04 |
- JEP 339: Edwards-Curve Digital Signature Algorithm (EdDSA)
- JEP 360: 봉인된 클래스 (Preview)
- JEP 371: 히든 클래스
- JEP 372:
Nashorn JavaScript Engine - JEP 373: Reimplement the Legacy DatagramSocket API
- JEP 374: Disable and Deprecate
Biased Locking - JEP 375: Pattern Matching for instanceof (Second Preview)
- JEP 377: ZGC: A Scalable Low-Latency Garbage Collector
- JEP 378: Text Blocks('' """statements""" '')
- JEP 379: Shenandoah: A Low-Pause-Time Garbage Collector
- JEP 383: Foreign-Memory Access API (Second Incubator)
- JEP 384: Records (Second Preview)
- JEP 385:
RMI Activationdeprecated
Java SE 14 2020.03
| 제공 | 지원종료 (확장) |
|---|---|
| | 2020. 09 |
| | 2020. 09 |
- JEP 305:
instnaceof를 위한 패턴 매칭 (Preview) - JEP 343: Packaging Tool (Incubator)
- JEP 345: NUMA-Aware Memory Allocation for G1
- JEP 349: JFR Event Streaming
- JEP 352: Non-Volatile Mapped Byte Buffers
- JEP 358: Helpful NullPointerExceptions
- JEP 359: Records (Preview)
- JEP 361:
switch표현 (Standard) - JEP 362:
Solaris and SPARC Portsdeprecated - JEP 363:
Concurrent Mark Sweep (CMS) Garbage Collector - JEP 364: ZGC on macOS
- JEP 365: ZGC on Windows
- JEP 366:
ParallelScavenge + SerialOld GC Combinationdeprecated - JEP 367:
Pack200 Tools and API - JEP 368: Text Blocks (Second Preview)
- JEP 370: Foreign-Memory Access API (Incubator)
Java SE 13 2019.09
| 제공 | 지원종료 (확장) |
|---|---|
| | 2020. 03 |
| | 2023. 03 |
Java SE 12 2019.03
| 제공 | 지원종료 (확장) |
|---|---|
| | 2019. 09 |
| | 2019. 09 |
- JEP 189: Shenandoah: A Low-Pause-Time Garbage Collector (Experimental)
- JEP 230: Microbenchmark Suite
- JEP 325:
switch표현 (Preview) - JEP 334: JVM Constants API
- JEP 340: One AArch64 Port, Not Two
- JEP 341: Default CDS Archives
- JEP 344: Abortable Mixed Collections for G1
- JEP 346: Promptly Return Unused Committed Memory from G1
Java SE 11 2018.09 (LTS)
| 제공 | 지원종료 (확장) |
|---|---|
| Oracle | 2023. 09 (2032. 01) |
| OpenJDK | Red Hat 유지보수중 |
| Eclipse Temurin | 2027. 10 |
| Azul | 2032. 01 |
| Amazon Corretto | 2027. 10 |
| Red Hat | 2024. 10 |
| IBM Semeru | 2024. 10 |
| Microsoft | 2024. 10 |
- JEP 181: Nest-Based Access Control
- JEP 309: Dynamic Class-File Constants
- JEP 315: Improve Aarch64 Intrinsics
- JEP 318: Epsilon: A No-Op Garbage Collector
- JEP 320: Remove the Java EE and CORBA Modules
- JEP 321: HTTP Client (Standard)
- JEP 323: Local-Variable Syntax for Lambda Parameters
- JEP 324: Key Agreement with Curve25519 and Curve448
- JEP 327: Unicode 10
- JEP 328: Flight Recorder
- JEP 329: ChaCha20 and Poly1305 Cryptographic Algorithms
- JEP 330: Launch Single-File Source-Code Programs
- JEP 331: Low-Overhead Heap Profiling
- JEP 332: Transport Layer Security (TLS) 1.3
- JEP 333: ZGC: A Scalable Low-Latency Garbage Collector (Experimental)
- JEP 335: Deprecate the Nashorn JavaScript Engine
- JEP 336: Deprecate the Pack200 Tools and API
A number of features from previous releases were dropped; in particular, Java applets and Java Web Start are no longer available. JavaFX, Java EE and CORBA modules have been removed from JDK.
Java SE 10 2018.03
| 제공 | 지원종료 (확장) |
|---|---|
| | 2018. 09 |
| | 2018. 09 |
| | 2018. 09 |
- JEP 286: 지역 변수 타입 추론 (
var) - JEP 296: JDK Forest를 단일 저장소로 통합
- JEP 304: Garbage-Collector 인터페이스
- JEP 307: Parallel Full GC for G1
- JEP 310: Application Class-Data Sharing
- JEP 312: Thread-Local Handshakes
- JEP 313:
Native-Header Generation Tool(javah)제거 - JEP 314: Additional Unicode Language-Tag Extensions
- JEP 316: 다른 메모리 장치에서의 힙 할당
- JEP 317: 실험적인 Java-Based JIT 컴파일러
- JEP 319: 루트 인증서
- JEP 322: Time-Based Release Versioning
Java SE 9 2017.09
| 제공 | 지원종료 (확장) |
|---|---|
| | 2018. 03 |
| | 2018. 03 |
| | 2018. 03 |
- JSR 376: Project Jigsaw의 JDK 모듈화(Java Platform Module System)
JavaDB- JEP 193: Variable handles, define a standard means to invoke the equivalents of various java.util.concurrent.atomic and sun.misc.Unsafe operations
- JEP 213: Milling Project Coin,
private인스턴스 메소드에서@SafeVarargs어노테이션 허용; the try-with-resources 구문에서 효과적인 final 변수 사용 허용; 유추된 유형의 인수가 추론가능한 경우 익명 클래스에서 다이아몬드(<>) 허용; Complete the removal, begun in Java SE 8, of underscore from the set of legal identifier names; 인터페이스에서private메소드 지원 - JEP 222: jshell: The Java Shell (Read-Eval-Print Loop): JShell은 자바 언어를 위한 REPL 명령줄 인터페이스입니다.
- JEP 254: Compact Strings
- JEP 263: HiDPI graphics: automatic scaling and sizing
- JEP 266: Reactive Streams의 자바 구현을 포함하고, Reactive Streams에서 이전에 제공된 인터페이슬 포함하는 새로운 Flow 클래스를 포함하는 더 많은 동시성 업데이트.
- JEP 268: XML catalogs
- JEP 282: 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
- JEP 295: Ahead-of-Time Compilation, ahead-of-time compilation provided by GraalVM
Java SE 8(1.8) 2014.03 (LTS)
| 제공 | 지원종료 (확장) |
|---|---|
| Oracle | 2022. 03 (2030. 12) |
| OpenJDK | Red Hat 유지보수중 |
| Oracle (비상업용) | 2030. 12 |
| Eclipse Temurin | 2026. 11 |
| | 2022. 3 |
| Azul | 2030. 12 |
| Amazon Corretto | 2026. 7 |
| Red Hat | 2026. 11 |
| IBM Semeru | 2026. 5 |
- JEP 174: Project Nashorn, a JavaScript runtime which can run JavaScript code embedded within applications
- JEP 104: 자바 타입에 대한 어노테이션
- 부호 없는 정수 연산
- JEP 120: 반복적인 어노테이션
- JEP 150: Date and time API
- JEP 178: 정적으로 연결된 JNI 라이브러리
- JEP 153: Launch JavaFX applications (direct launching of JavaFX application JARs)
- JEP 122: Remove the permanent generation
Java SE 7 (Dolphin) 2011.07.28
| 제공 | 지원종료 (확장) |
|---|---|
| | 2022. 09 |
| | 2022. 9 (2027. 11) |
| | 2020. 8 |
| | 2015. 5 |
| | 2020. 6 |
- JVM : Dynamic Language support (`invokedynamic` * new byte operation)
- 64bit pointer
- switch(string) 문자열 허용
- try: try(resource) close (AutoClosable, Closeable interface)
public static void main(String args[]) { // 이전 FileInputStream fin = null; BufferedReader br = null; try { fin = new FileInputStream("info.xml"); br = new BufferedReader(new InputStreamReader(fin)); if (br.ready()) { String line1 = br.readLine(); System.out.println(line1); } } catch (Exception ex) { System.out.println("error!!"); } finally { try { if (fin != null) fin.close(); if (br != null) br.close(); } catch (IOException ie) { System.out.println("Failed to close files"); } } } public static void main(String args[]) { try (FileInputStream fin = new FileInputStream("info.xml"); BufferedReader br = new BufferedReader(new InputStreamReader(fin));) { if (br.ready()) { String line1 = br.readLine(); System.out.println(line1); } } catch (Exception ex) { System.out.println("error"); } }
- generics 내 타입 추론:
< >연산자
// 이전 버전 Map<String, Object> user = new HashMap<String, Object>(); // 추론 Map<String, Object> user = new HashMap<> ();
- varargs 단순화 정의
- Binary integer Literals
- underscore 000_000_000
- Catching multiple exception types
- API
- Concurrency 강화
- NIO: java.nio.file, java.nio.file.attribute, java.nio.file.spi
- sort강화 (merge sort)
- crypto강화
- GPU강화
- JavaFX가 기본으로 포함
- 정식 G1 GC
- 안정적인 ARM지원
- 한정적 와일드 카드 사용시 정확한 추론 못함. → 명시적 타입 인수(explicit type arguement)사용 또는 1.8 사용
Java SE 6 (Mustang) 2006.12.11
| 제공 | 지원종료 (확장) |
|---|---|
| | 2013. 04 |
| | 2018. 11 (2027. 11) |
| | 2016. 11 |
- G1(Garbage First) GC : 시험용
J2SE 5(1.5) (Tiger) 2004
- 제너릭 Generics: provides compile-time (static) type safety for collections and eliminates the need for most typecasts (type conversion) (specified by JSR 14)
- 메타데이터 Metadata 어노테이션 Annotation
@: allows language constructs such as classes and methods to be tagged with additional data, which can then be processed by metadata-aware utilities (specified by JSR 175) - 오토박싱/언박싱 Autoboxing/unboxing (Wrapping): automatic conversions between primitive types (such as int) and primitive wrapper classes (such as Integer) (specified by JSR 201)
- 열거형 Enumerations
enum: the enum keyword creates a typesafe, ordered list of values (such as Day.MONDAY, Day.TUESDAY, etc.); previously this could only be achieved by non-typesafe constant integers or manually constructed classes (typesafe enum pattern) (specified by JSR 201) - 가변인수 Varargs: the last parameter of a method can now be declared using a type name followed by three dots (e.g. void drawtext(String… lines)); in the calling code any number of parameters of that type can be used and they are then placed in an array to be passed to the method, or alternatively the calling code can pass an array of that type
- 향상된
foreach 루프: the for loop syntax is extended with special syntax for iterating over each member of either an array or any Iterable, such as the standard Collection classes (specified by JSR 201) - Improved semantics of execution for multi-threaded Java programs; the new Java memory model addresses issues of complexity, effectiveness, and performance of previous specifications
- 정적 임포트 Static imports
standard libraries 변경점:
- Automatic stub generation for RMI objects
- Swing: New skinnable look and feel, called synth
- 동시성 유틸(
java.util.concurrent) - Scanner class for parsing data from various input streams and buffers
J2SE 1.4 (Marlin) 2002
assertkeyword- Regular Expressions 정규표현식
- Java Web Start
- Java Comunity Process (JCP) → 오픈소스
- Java 2 Secruity
- Non-blocking I/O (NIO)
- API
- Preferences API (java.util.prefs)
J2SE 1.3 (Kestrel) 2000
- HotSpot JVM(Sun JIT)
- Java Naming and Directory Interface (JNDI)
- JPDA
- JavaSound
J2SE 1.2 (Playgroud) 1998
- strctfp
- Swing GUI
- Java plug-in
- CORBA IDL(이종기기간 함수 호출 스팩)
- Collections Framework
- JIT
JDK 1.1 1997
- AWT event
- inner class
- JavaBeans
- JDBC
- RMI (Remote Method Invocation)
- reflection
- JIT (Just In Time) complier
- Internationalization & Unicode