관련 문서: Java/기타 버전
1. 개요2. JDK 1.0a3. JDK 1.0a24. JDK 1.05. JDK 1.16. J2SE 1.27. J2SE 1.38. J2SE 1.49. J2SE 510. Java SE 611. Java SE 712. Java SE 813. Java SE 914. Java SE 1015. Java SE 1116. Java SE 1217. Java SE 1318. Java SE 1419. Java SE 1520. Java SE 1621. Java SE 1722. Java SE 1823. Java SE 1924. Java SE 2025. Java SE 2126. Java SE 2227. Java SE 2328. Java SE 2429. 기타
[clearfix]
1. 개요
프로그래밍 언어 Java의 버전에 관해 정리한 문서이다.2. JDK 1.0a
1994년 발표.3. JDK 1.0a2
1995년 5월 23일 발표. 언어 자체가 정식으로 발표된 날이기도 하다.4. JDK 1.0
1996년 1월 23일 발표. 발표 이전에 불렸던 이름은 Oak였으며, 안정화 작업을 거친 1.0.2 버전에서 Java로 이름이 바뀌었다.5. JDK 1.1
1997년 2월 19일 발표. 이너 클래스, JavaBeans, RMI, 리플렉션, 유니코드 지원, 국제화(Internationalization) 등이 추가되었다.6. J2SE 1.2
1998년 12월 8일 발표. 일반 지원은 2003년 11월에 종료되었다. 새로운 GUI, JIT, CORBA 등의 굵직한 기능이 추가되면서 2부터 약칭을 J2SE(Java 2 Standard Edition)로 표기하기 시작했으며, 이 표기는 5까지 사용된다. strictfp, Swing GUI, JIT, Java Applet을 구동하는 웹 브라우저 플러그인, CORBA, Collections 등이 추가되었다. 1999년에 업데이트를 통해 HotSpot JVM이 첫 선을 보인다.7. J2SE 1.3
2000년 3월 8일 발표. 일반 지원은 2006년 11월에 종료되었다. HotSpot JVM, JNDI, JPDA, JavaSound 등이 추가되었다. RMI가 CORBA를 지원하도록 변경되었다.8. J2SE 1.4
2002년 2월 6일 발표. 일반 지원[1]은 2008년 10월, 연장 지원[2]은 2013년 2월에 종료되었다. assert, 정규 표현식, IPv6, Non-Blocking IO, XML API, JCE, JSSE, JAAS, Java Web Start 등이 추가되었다.9. J2SE 5
2004년 9월 30일 발표. 일반 지원은 2009년 9월, 연장 지원은 2015년 5월에 종료되었다. J2SE 5.0까지 Windows 9x와 Windows NT 4.0이 지원되었다. 이때부터 버전 중 앞의 1을 빼버리고 표기하기 시작했다. 그러나 내부적으로는 여전히 1.5, 1.6, 1.7 등으로 데이터가 들어있다. Generics, Annotation, Auto Boxing/Unboxing, Enumeration, 가변 길이 파라미터, Static Import, 새로운 Concurrency API 등이 추가되었다. Java는 표준 입력(stdin) 지원이 시원찮았는데, J2SE 5에 들어서 java.util.Scanner가 추가되면서 이전보다 편하게 표준 입력을 사용할 수 있게 되었다.10. Java SE 6
2006년 12월 11일 발표. 일반 지원은 2013년 2월에 종료되었으며, 연장 지원은 2018년 12월에 종료되었다. 이때부터 표기가 J2SE에서 Java SE로 바뀌었다. Scripting Language Support, JDBC 4.0, Java Compiler API, Pluggable Annotation 등이 추가되었다. 스크립팅 언어 지원과 함께 Rhino JavaScript 엔진이 기본으로 탑재되었다.11. Java SE 7
2011년 7월 7일 발표. 일반 지원은 2015년 4월에 종료되었으며, 연장 지원도 2022년 7월에 종료되었다. Dynamic Language 지원, switch문에서 String 사용, try문에서 자동 자원 관리, Diamond Operator <>, 이진수 리터럴, 숫자 리터럴에 _ 지원, 새로운 Concurrency API, 새로운 File NIO 라이브러리, Elliptic Curve Cryptography, Java2D를 위한 XRender, Upstream, Java Deployment Ruleset 등이 추가되었다.12. Java SE 8
2014년 3월 18일 발표. 일반 지원은 2019년 1월에 종료되었고, 연장 지원은 2023년 9월에 종료될 예정이다. Lambda Expression, Rhino 대신 Nashorn JavaScript 엔진 탑재, Annotation on Java Types, Unsigned Integer 계산, Repeating Annotation, 새로운 날짜와 시간 API(사실상 JodaTime이라고 보면 된다), Static Link JNI Library, Interface Default Method, PermGen 영역 삭제, Stream API 등이 추가되었다. 본래 일반 지원은 2017년 9월 종료 예정이었으나 Java 9 발표의 지연 때문에 2018년 9월로 연장되었다가, 이후 라이선스 이관 문제로 인해 2019년 1월로 다시 연장되었다.32비트를 지원하는 마지막 공식 Java 버전으로, 이후 버전의 32비트 지원은 오직 서드 파티를 통해서만 지원된다.[3]
오라클 유료 지원으로 2030년까지 지원이 연장된다는 기사가 있다.
13. Java SE 9
2017년 9월 21일 발표. 일반 지원은 2018년 3월에 종료되었다.Project Jigsaw 기반으로 런타임이 모듈화된 것이 가장 큰 특징. 이에 따라 대부분의 콘솔 프로그램 개발에는 더 이상 AWT나 Swing 같은 불필요한 라이브러리를 끌어 쓸 필요도 없이, 최상위 모듈인 Base만 사용해도 된다. 더불어 특정 프로그램에 최적화된 최소 런타임을 제작할 수 있게 되면서 패키징 역시 간편해졌다.
여기에 Java를 인터프리터 언어 셸처럼 사용할 수 있는 JShell이 추가되었으며, Java 바이트코드를 기계어로 미리 번역하는 선행 컴파일(Ahead-Of-Time Compilation) 역시 실험 기능으로 추가되었다.[4] 또한 Deprecated 표시에는 해당 버전과 제거 예정 여부를 표시할 수 있게 되었다. 그 외에 구조적 불변 컬렉션, 통합 로깅, HTTP/2, private 인터페이스 메소드, HTML5 Javadoc 등도 지원되며, 프로퍼티 파일에 UTF-8이 지원됨에 따라 더 이상 인코딩 문제로 삽질할 필요가 없어졌다. 또한 Java Applet 기능은 지원이 종료된다. 또한 예약어로
_
(밑줄 1개)가 추가돼, 이전 버전에서 썼던 식별자 이름으로는 더 이상 사용할 수 없게 되었다.[5]새로 적용된 버저닝 정책에 따라 이 버전부터는 더 이상 1.x 버전으로 내놓지 않고, 대신 9.0으로 급속한 판올림이 일어났다. 또한 제거 예정인 Deprecated API는 다음 버전인 Java SE 10부터 완전 삭제 예정이므로 해당 API를 쓰는 프로그램은 더 이상 이후의 버전에서 컴파일조차 불가능하게 된다. 그리고 Java SE 9부터는 6개월마다 새로운 버전이 업데이트된다.
본래는 2016년 발표 예정이었으나 2번이나 연기되어 2017년 7월 27일 발표 예정, 그나마도 한 번 더 연기되어 9월 21일에 발표되었다. 가장 큰 원인은 역시 Project Jigsaw의 개발 난이도였다. 런타임의 모듈화는 하위 호환성을 어느 정도 포기하고 성능을 추구한 것이기에 아직 현장에서는 Java 9로 넘어가는 것을 꺼리는 분위기다. 어떻게 넘어간 후에도 Java에서 지원하는 모듈 기능을 쓰지는 않고, 여전히 Maven이나 Gradle 등 기존 도구를 사용하는 경우가 대부분.
이 버전부터 64비트 버전만 출시되었으며, 32비트 버전은 더 이상 공식적으로 나오지 않는다.
14. Java SE 10
2018년 3월 20일 발표. 일반 지원은 2018년 9월에 종료되었다. var 키워드를 이용한 지역 변수 타입 추론[6], 병렬 처리 가비지 컬렉션, 개별 스레드로 분리된 Stop-The-World, 루트 CA 목록 등이 추가되었다. 또한 JDK의 레포지토리가 하나로 통합되었으며, JVM 힙 영역을 시스템 메모리가 아닌 다른 종류의 메모리에도 할당할 수 있게 되었다. 실험 기능으로 Java 기반의 JIT 컴파일러가 추가되었고, 이전 버전에서 Deprecated 처리된 API는 Java SE 10에서 모두 삭제되었다.15. Java SE 11
2018년 9월 25일 발표. 일반 지원은 2023년 9월, 연장 지원은 2026년 9월에 종료될 예정이다. 이클립스 재단으로 넘어간 Java EE가 JDK에서 삭제되고, JavaFX도 JDK에서 분리되어 별도의 모듈로 제공된다. #[7] Gloun이라는 업체가 JavaFX를 유지 보수 중이므로 이곳에서 다운로드받으면 된다. 람다 파라미터에 대한 지역 변수 문법[8], 엡실론 가비지 컬렉터, HTTP 클라이언트 표준화 등의 기능이 추가되었다.가장 커다란 변화는 바로 라이선스 부분. Java SE 11부터 Oracle JDK의 독점 기능이 오픈 소스 버전인 OpenJDK에 이식된다. 이는 다시 말해 Oracle JDK와 OpenJDK가 완전히 동일해진다는 뜻이다. Oracle JDK는 Java SE 11부터 LTS(장기 지원) 버전으로 3년마다 출시되는데, 출시 후 5년 동안 오라클의 기술 지원이 제공되고 최대 3년까지 지원 기간을 연장할 수 있다. Oracle JDK는 이제 3년에 한 번 출시되니 Java의 실질적인 버전 업을 담당하는 것은 OpenJDK가 된 셈이다. OpenJDK는 기업들을 위한 기술 지원은 없고, 새로운 버전이 나오면 이전 버전에 대한 마이너 업데이트와 보안 업데이트는 중단된다.
그리고 Java 11과 함께 발표된 또 다른 소식은 바로 Oracle JDK가 구독형 유료 모델로 전환된다는 점이다. # 2019년 1월부터 오라클이 제공하는 모든 Oracle JDK는 유료화되며, 구독권을 구입하지 않으면 Oracle JDK에 접근 자체가 금지된다. 기존의 일반/연장 지원 서비스는 구독권에 포함되므로 별도의 서비스로는 제공되지 않는다. 개인 사용자는 2021년 1월부터 비용을 지불해야 한다. 이 때문에 많은 기업들이 Oracle JDK에서 발을 빼고 있으며, OpenJDK를 기반으로 한 다른 서드파티 JDK가 대안으로 떠오르고 있다. 대표적인 예로 Azul Systems에서 개발한 Zulu JDK가 있는데, Zulu JDK는 오라클의 TCK(Technology Certification Kit) 인증을 받은 구현체이다. 개인과 기업 모두 무료로 사용할 수 있고, 기술 지원에 한해서만 유료 서비스가 제공된다. 또 다른 대안으로는 AdoptOpenJDK가 있는데, AdoptOpenJDK는 HotSpot VM 대신 Eclipse OpenJ9을 탑재한 버전도 같이 제공하고 있다. 다만 아직 TCK 인증을 받지 않았기에 주의가 필요하다.
16. Java SE 12
2019년 3월 19일 공개. 특징 중 하나로 문법적으로 switch문을 확장한 것이 있다.(출처){{{#!syntax java
switch (day) {case MONDAY:
case FRIDAY:
case SUNDAY:
case SATURDAY:
}case FRIDAY:
case SUNDAY:
System.out.println(6);
break;
case TUESDAY:break;
System.out.println(7);
break;
case THURSDAY:break;
case SATURDAY:
System.out.println(8);
break;
case WEDNESDAY:break;
System.out.println(9);
break;
break;
}}}
예전에는 이렇게 써야 했던 switch문을 아래와 같은 형식으로도 쓸 수 있게 되었다.
{{{#!syntax java
switch (day) {{{{#!syntax java
case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
case TUESDAY -> System.out.println(7);
case THURSDAY, SATURDAY -> System.out.println(8);
case WEDNESDAY -> System.out.println(9);
}case TUESDAY -> System.out.println(7);
case THURSDAY, SATURDAY -> System.out.println(8);
case WEDNESDAY -> System.out.println(9);
}}}
이 외에 가비지 컬렉터 개선, 마이크로 벤치마크 툴 추가, 성능 개선의 변경점이 있다.
17. Java SE 13
2019년 9월 17일 공개. java 12에서의 스위치 개선을 이어 yield라는 예약어가 추가되었다.#!syntax java
var a = switch (day) {
case MONDAY, FRIDAY, SUNDAY:
yield 6;
case TUESDAY:
yield 7;
case THURSDAY, SATURDAY:
yield 8;
case WEDNESDAY:
yield 9;
};
18. Java SE 14
2020년 3월 18일 공개. 프리뷰 기능으로 instanceof의 패턴 매칭과 record라는 데이터 오브젝트 선언이 추가되었다. 그 외에 incubator 단계의 패키징 툴(OS에 맞춘 실행 파일 생성 기능) 추가 등이 변화가 이루어졌다.instanceof 패턴 매칭
#!syntax java
if (!(obj instanceof String s)) {
.. s.contains(..) ..
} else {
.. s.contains(..) ..
}
record 타입 지원
#!syntax java
record Point(int x, int y) { }
19. Java SE 15
2020년 9월 15일 공개 (한국 기준 9월 16일)- EdDSA 암호화 알고리즘 추가
- 패턴 매칭(2차 미리 보기, 상단 Java 14 참조)
- 스케일링 가능한 낮은 지연의 가비지 컬렉터 추가(ZGC)
- Solaris 및 SPARC 플랫폼 지원 제거
- 외부 메모리 접근 API (인큐베이팅)
- 레코드(2차 미리 보기, 상단 Java 14 참조)
- 클래스 봉인(미리 보기)
상속 가능한 클래스를 지정할 수 있는 봉인 클래스가 제공된다.
상속 가능한 대상은 상위 클래스 또는 인터페이스 패키지 내에 속해 있어야 한다.
{{{#!syntax java
package wiki.namu.example.species;
package wiki.namu.example.species;
public sealed class Animal
Dog,
wiki.namu.example.species.india.Monkey,wiki.namu.example.species.sabana.Leopard
{
// ...
}}}}
- 다중 텍스트 블록
이제 자바에서도 여러 줄의 문자열을 손쉽게 작성할 수 있다.
{{{#!syntax java
String html = """
}}}String html = """
<html>
""";
<body>
</html><p>Hello, world</p>
</body>""";
20. Java SE 16
2021년 3월 16일 출시.- JEP 338: Vector API
- JEP 347: 자바 네이티브(JNI 등) 개발 시 C++14 규격을 지원하기 시작했다.
- OpenJDK 의 버전 관리가 Mercurial 이었으나, 이제 Git으로 바뀐다.
- 이제 OpenJDK 소스를 GitHub 에서 볼 수 있다.#
- 자바 11부터 시작했으며 15부터 정식으로 도입한 ZGC 기능이 향상되었다.
- 유닉스 도메인 소켓이 지원된다.
- Alpine Linux 리눅스 지원 추가
- JEP 387: 자바 8부터 제거된 악명 높은 PermGen 대신 Metaspace 방식을 지원하기 시작한다.
- ARM 64비트 윈도우 운영 체제가 지원된다. MacOS의 경우 실리콘 맥 지원이 시험 빌드에서 네이티브 지원을 시작했다.
- JEP 389: JNI를 대신할 외부 링크 방식의 인터페이스를 인큐베이팅을 통해 시작한다.
- JEP 390: 값 유형의 클래스를 동기화에 사용 시 경고 메시지가 개선되었다.
자바에서도 자동 병렬 프로세싱을 지원하는 자동 벡터 API가 추가될 예정이다.
#!syntax java
public class JEP390 {
public static void main(String[] args) {
Double d = 20.0;
synchronized (d) {} // 컴파일 시 해당 줄 내용과 함께한 경고 메시지가 친절히 표시된다.
}
}
- JEP 343:
jpackage
명령어를 통해 각 운영 체제별 자바 프로그램을 설치 패키지(pkg, deb, msi 등)로 생성하는 기능이 정식으로 추가되어, 자바 프로그램을 손쉽게 배포하는 기능이 추가된다. - 자바 15의 외부 메모리 접근 인큐베이팅 2차
- 자바 14의 패턴 매칭이 정식 기능으로 추가
- 자바 14에 추가된
Record
형식 정식 지원 - 자바 9부터 추가되어 자바 내부 API 접근에 대한 경고 무시 (
--illegal-access
) 기능이 강화되어 내부 API 접근 시도 시 기본적으로 오류와 함께 자바 프로그램이 종료될 수 있도록 강화 - 자바 15에 추가된 봉인 클래스의 2차 미리보기
21. Java SE 17
자바 8, 11 버전을 이을 세 번째 LTS 버전이 한국시각 2021년 9월 15일 출시되었다. 정보 OpenJDK 다운로드- 패턴 매칭은 여전히 Preview 단계이다.
- 외부 함수/메모리 API 및 신규 벡터 API는 인큐베이팅 단계이다.
- JEP 398: 애플릿이 완전히 제거될 예정으로 Deprecated 처리.
- JEP 391: 애플 M1 및 이후(macOS/AArch64) 프로세서 탑재 컴퓨터 제품군에 대한 정식 지원
- JEP 382: macOS 그래픽 렌더링 베이스를 OpenGL에서 Metal로 교체
- JEP 356: 의사 난수 생성기를 통해 예측하기 어려운 난수를 생성하는 API 정식 추가
- JEP 415: 컨텍스트 기반의 역직렬화 필터링
- JEP 409: 봉인 클래스가 정식 추가되었다.
22. Java SE 18
2022년 3월 22일에 출시되었다.- JEP 400: 자바 API의 기본 Charset이 UTF-8으로 지정되었다.
- JEP 408: 정적 파일을 서빙하는 기능만 있는 심플한 웹 서버 제공(커맨드라인 툴)
- JEP 413: Java API Doc에 @snippet 태그 추가
- JEP 416: 리플렉션 기능 리팩터링(메소드 핸들을 이용해 다시 구현)
- JEP 417: 벡터 API(세 번째 인큐베이터 단계)
- JEP 418: Internet-Address Resolution SPI
- JEP 419: 외부 함수 & 메모리 API(두 번째 인큐베이터 단계)
- JEP 420: switch문 패턴 매칭(두 번째 프리뷰)
- JEP 421: try문의 finally 기능 사용을 권장하지 않는다. try-with-resources를 이용하자.
23. Java SE 19
2022년 9월에 출시되었다.- JEP 405: 레코드 패턴 매칭(프리뷰)
- JEP 422: Linux/RISC-V Port
- JEP 424: 외부 함수 & 메모리 API(프리뷰)
- JEP 425: 가상 스레드(프리뷰)
- JEP 426: 벡터 API(네 번째 인큐베이터 단계)
- JEP 427: switch문의 패턴 매칭(세 번째 프리뷰)
- JEP 428: 멀티스레드 프로그래밍을 단순화하는 Structured Concurrency API(인큐베이터 단계)
24. Java SE 20
2023년 3월 21일에 출시되었다.- JEP 429: Scoped Values(인큐베이터 단계)
- JEP 432: 레코드 패턴 매칭(두 번째 프리뷰)
- JEP 433: switch문 패턴 매칭(네 번째 프리뷰)
- JEP 434: 외부 함수 & 메모리 API(두 번째 프리뷰)
- JEP 436: 가상 스레드(두 번째 프리뷰)
- JEP 437: Structured Concurrency(두 번째 인큐베이터 단계)
25. Java SE 21
네 번째 LTS, 2023년 9월 20일에 출시되었다. 8월 18일 첫 번째 RC 버전 이후 오류 보고가 없어 이대로 바로 GA로 출시했다고 한다.- JEP 430: 템플릿 문자열(미리 보기): JavaScript나 C# 등에서도 변수나 식을 주입할 수 있는 특수 문자열 문법
- JEP 431: 순차 컬렉션(Sequenced Collections)
- JEP 439: 차세대 ZGC
- JEP 440: 레코드 패턴
- JEP 441:
switch
문의 패턴 매칭 정식 출시 - JEP 442: 외부 함수 및 메모리 API(3번째 미리보기): JNI를 이을 차세대 네이티브 연동 API.
- JEP 443: 이름 없는 패턴 및 변수(미리 보기)
- JEP 444: 가상 스레드(Virtual Threads): Project Loom으로 알려진 기술. 기존 스레드보다 비용이 저렴하고 더 많이 생성 가능하며, Spring 에서 이 기술을 적용하여 기존 코드로도 동시성 처리를 만들어준다고 공언한 원천 기술이 정식 출시되었다.
- JEP 445: 이름없는 클래스 및 인스턴스 메인 메소드(미리 보기):
main
함수 없이 콘솔 및 프로그램으로 동작하도록 지원하는 구문이 여기에 해당. - JEP 446: 스코프값(미리 보기)
- JEP 448: 벡터 API(6번째 인큐베이터)
- JEP 449: Windows 32-bit x86 제거 예정
- JEP 451: 자바 Agent의 동적 불러오기를 허용하지 않도록 세팅
- JEP 452: 키 캡슐화 메커니즘 API
- JEP 453: 구조화된 동시성(미리 보기)
26. Java SE 22
2024년 3월 19일에 출시되었다.주의: 프리뷰 기능들은 기본적으로 비활성화되어 있는 경우가 있음.
- JEP 423: G1 GC에 Region Pinning 기술을 구현해 지연 시간(latency) 단축
- JEP 447: super() 호출 전에 다른 statement 실행을 가능하게 함(프리뷰 기능). 객체 생성 전에 미리 인자 등을 검증할 수 있다면 생성자를 호출할 필요 없이 미리 예외를 던질 수 있을 것이다.
{{{#!syntax java
public class PositiveBigInteger extends BigInteger {
public PositiveBigInteger(long value) {
if (value <= 0)
}throw new IllegalArgumentException("non-positive value");
super(value);}
}}}
- JEP 454: 외래 함수 및 메모리 API . 자바 런타임 외부 데이터 및 함수와 상호운용하기 위함.
- JEP 456: 이름 없는 변수 및 패턴. 안 쓰는 변수 이름을 언더스코어(_)로 표기하는 것을 허용해 가독성을 향상한다.
{{{#!syntax java
static int count(Iterable<Order> orders) {
int total = 0;
for (Order _ : orders) // Unnamed variable
total++;
return total;
}}}
#!syntax java
String s = ...
try {
int i = Integer.parseInt(s);
... i ...
} catch (NumberFormatException _) { // Unnamed variable
System.out.println("Bad number: " + s);
}
- JEP 457: Class 파일 API (프리뷰). 자바 클래스 파일을 파싱하고 생성하고 변환하는 표준 API 제공.
- JEP 458: java 런처 .java 파일을 다이렉트로 실행할 때 여러 파일을 실행할 수 있도록 함. 자바를 갖고 노는 걸(tinkering) 편하게 하기 위한 편의성 기능. 이러한 편의성 기능 중 하나로 jshell이 있다.
- JEP 459: String template(두 번째 프리뷰). String interpolation으로 가독성과 편의성을 향상.
#!syntax java
String title = "My Web Page";
String text = "Hello, world";
String html = STR."""
<html>
<head>
<title>\{title}</title>
</head>
<body>
<p>\{text}</p>
</body>
</html>
""";
- JEP 460: 벡터 API(7번째 인큐베이터 단계)
- JEP 461: Stream Gatherers(프리뷰). 자바 stream api에서 커스텀 gatherer을 구현해 스트림 중간 단계 연산의 가독성을 향상시킨다.
#!syntax java
// 새 기능을 이용해 WindowFixed를 정의했다고 가정 (자세한 건 JEP 461 문서 참고)
jshell> Stream.of(1,2,3,4,5,6,7,8,9).gather(new WindowFixed(3)).toList()
$1 ==> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
- JEP 462: 구조화된 동시성("Structured Concurrency")(두 번째 프리뷰). 스레드 캔슬이나 셧다운에 대한 리스크를 줄이고 동시성 코드의 observability 향상. 여러 스레드에서 실행되는 관련 있는 작업들을 그룹핑하는 기능이다.
- JEP 463: 암묵적으로 정의된 클래스와 인스턴스 main 메소드(두 번째 프리뷰). 자바 초보자의 진입 장벽을 낮추기 위한 기능. ("New programmers just want to write and run a computer program")
#!syntax java
void main() {
System.out.println("Hello, World!");
}
- JEP 464: Scoped values(두 번째 프리뷰). 같은 스레드 내에서의 공유 데이터를 관리하기 위한 컨테이너 오브젝트. ThreadLocal과 비슷하지만 ThreadLocal의 단점을 보완해 더 적은 리소스를 사용하고 더 안전하다고 한다(특히 VirtualThreads, StructuredConcurrency랑 같이 활용될 때).
27. Java SE 23
2024년 9월 17일에 출시가 되었다.28. Java SE 24
2025년 3월 18일 출시를 목표로 개발중이다.- JEP 472 : Prepare to Restrict the Use of JNI
- JEP 475 : Late Barrier Expansion for G1
- JEP 484 : Class-File API
- JEP 489 : Vector API (Ninth Incubator)
29. 기타
Oracle에서 자바 공식 로드맵을 통해 자바의 미래 버전 적용 상황을 볼 수 있다.[1] Premier Support. 오라클에 비용을 내고 기술 지원을 받는 서비스이다.[2] Extended Support. 일반 지원이 종료된 후 추가적인 비용을 지불하여 기술 지원을 더 받을 수 있는 기간이다.[3] Azul에서 zulu JDK라는 이름으로 LTS 기준으로 17까지 32비트 버전을 지원하고 있다.[4] GCC 계열 Java 컴파일러인 GCJ에서는 이미 지원하고 있던 기능이다.(현재는 출시 중단)[5]
_
를 식별자로 쓰는 라이브러리의 경우, 해당 라이브러리를 _
를 식별자로 쓰지 않는 버전으로 업데이트해야 한다.[6] C#과 Kotlin의 var와 똑같은 기능이다.[7] 따라서 이전 버전과 호환이 안 될 가능성도 있다. 이전 버전에서는 그냥 내부 메소드 쓰듯이 JavaFX를 갖다 썼다면, 이제는 라이브러리를 따로 인클루드해서 배포해야 하기 때문.[8] '@Nonnull var x, @Nullable var y'를 'x.process(y)'로 간략화할 수 있게 되었다.