자바 버전 역사

위키미디어 목록 항목
(자바 버전의 역사에서 넘어옴)

자바 언어는 JDK 1.0 이후로 여러 가지 변경 사항을 겪었을 뿐만 아니라 표준 라이브러리에 대한 수많은 클래스 및 패키지 추가를 거쳤다. J2SE 1.4 이후 Java 언어의 발전은 JSR(Java Specification Requests)을 사용하여 Java 플랫폼에 대한 추가 및 변경 사항을 제안하고 규정하는 JCP(Java Community Process)에 의해 관리되었다. 언어는 JLS(Java Language Specification)에 의해 규정된다. JLS에 대한 변경 사항은 JSR 901에 따라 관리된다. 2017년 9월 Java 플랫폼의 수석 아키텍트인 마크 레이놀드(Mark Reinhold)는 릴리스 트레인을 당시의 2년 일정이 아닌 "6개월마다 하나의 기능 릴리스"로 변경할 것을 제안했다. 이 제안은 이후의 모든 버전에 적용되었다.

언어 변경 외에도 JDK 1.0의 수백 개 클래스에서 J2SE 5의 3,000개 이상으로 성장한 수년에 걸쳐 Java 클래스 라이브러리에 다른 변경 사항이 적용되었다. Swing 및 Java2D와 같은 완전히 새로운 API가 도입되었으며 원래의 수많은 JDK 1.0 클래스 및 메서드는 현재 구식(deprecated)이다. 일부 프로그램은 Java 플랫폼의 한 버전에서 이전 버전으로 Java 프로그램을 변환할 수 있다. (예: Java 5.0이 1.4로 백포트됨)

Oracle Java SE 지원 로드맵과 관련하여 버전 19는 최신 버전이며 버전 17, 11 및 8은 현재 지원되는 LTS(장기 지원) 버전이며 오라클 프리미어 서포트(Oracle Premier Support)를 받게 된다. Java 8 LTS 상업용 마지막 무료 소프트웨어 공개 업데이트는 Oracle에서 2022년 3월에 출시했으며 Oracle은 계속해서 개발 및 개인용 무료 공개 Java 8 업데이트를 지속적으로 출시하고 있다. Java 7은 더 이상 공개적으로 지원되지 않는다. Java 11의 경우 Oracle은 대중을 위해 장기 지원을 제공하지 않는다. 대신 Eclipse Adoptium 등과 같은 광범위한 OpenJDK 커뮤니티가 작업을 수행할 것으로 예상된다.

Java 17 최신(3차) LTS가 2021년 9월 14일에 릴리스되었다.

Java 19 일반 가용성(General Availability, GA)은 2022년 9월 20일에 시작되었다.

최신(제4차) LTS인 자바 21은 2023년 9월 19일에 출시되었다.[1]

출시표

버전클래스 파일 포맷 버전[2]출시일무료 공개 업데이트 중단[3][4][5][6][7][8][9]지원 확대 기한
오래된 버전, 지원 중단: JDK 1.0451996년 1월 23일1996년 5월빈칸
오래된 버전, 지원 중단: JDK 1.145.31997년 2월 2일2002년 10월?
오래된 버전, 지원 중단: J2SE 1.2461998년 12월 4일2003년 9월?
오래된 버전, 지원 중단: J2SE 1.3472000년 5월 8일2010년 10월?
오래된 버전, 지원 중단: J2SE 1.4482002년 2월 13일2008년 10월2013년 2월
오래된 버전, 지원 중단: Java SE 5492004년 9월 29일2009년 11월2015년 4월
오래된 버전, 지원 중단: Java SE 6502006년 12월 11일2013년 4월2018년 12월 (Oracle)[3]
2026년 12월(Azul)[6]
오래된 버전, 지원 중단: Java SE 7512011년 7월 28일2022년 9월 (OpenJDK)
2015년 5월까지 유지보수를 Oracle이 담당[10],
레드햇 (2020년 8월까지)[11]
Azul (2022년 9월까지)[12]
2022년 7월 (Oracle)[3]
2020년 6월 (레드햇)[7]
2027년 12월 (Azul)[6]
오래된 버전, 지원 중: Java SE 8 (LTS)522014년 3월 18일(OpenJDK의 현 유지보수 담당: 레드햇)[13]
2022년 3월 (Oracle, 상업용)
2030년 12월 (Oracle, 비상업용)
2030년 12월 (Azul)[6]
2026년 5월 (IBM Semeru)[8]
최소 2026년 5월 (Eclipse Adoptium)[4]
최소 2026년 5월 (Amazon Corretto)[5]
2030년 12월 (Oracle)[3]
2026년 11월 (레드햇)[7]
오래된 버전, 지원 중단: Java SE 9532017년 9월 21일2018년 3월 (OpenJDK)빈칸
오래된 버전, 지원 중단: Java SE 10542018년 3월 20일2018년 9월 (OpenJDK)빈칸
오래된 버전, 지원 중: Java SE 11 (LTS)552018년 9월 25일(OpenJDK의 현 유지보수 담당: 레드햇)[14]
2026년 9월 (Azul)[6]
2024년 10월 (IBM Semeru)[8]
최소 2024년 10월 (Eclipse Adoptium)[4]
최소 2027년 9월 (Amazon Corretto)[5]
최소 2024년 10월 (마이크로소프트)[15][9]
2026년 9월 (Oracle)[3]
2026년 9월 (Azul)[6]
2024년 10월 (레드햇)[7]
오래된 버전, 지원 중단: Java SE 12562019년 3월 19일2019년 9월 (OpenJDK)빈칸
오래된 버전, 지원 중단: Java SE 13572019년 9월 17일(OpenJDK의 현 유지보수 담당: Azul)[16]
2023년 3월 (Azul)[6]
빈칸
오래된 버전, 지원 중단: Java SE 14582020년 3월 17일2020년 9월 (OpenJDK)빈칸
오래된 버전, 지원 중단: Java SE 15592020년 9월 16일(OpenJDK의 현 유지보수 담당: Azul)[17]
2023년 3월 (Azul)[6]
빈칸
오래된 버전, 지원 중단: Java SE 16602021년 3월 16일2021년 9월 (OpenJDK)빈칸
오래된 버전, 지원 중: Java SE 17 (LTS)612021년 9월 14일(OpenJDK의 현 유지보수 담당: SAP)[18]
2029년 9월 (Azul)[6]
2027년 10월 (IBM Semeru)[8]
최소 2027년 9월 (마이크로소프트)[9]
최소 2027년 9월 (Eclipse Adoptium)[4]
2029년 9월부터 (Oracle)[3]
2029년 9월 (Azul)[6]
2027년 10월 (레드햇)[7]
오래된 버전, 지원 중단: Java SE 18622022년 3월 22일2022년 9월 (OpenJDK 및 Adoptium)빈칸
오래된 버전, 지원 중단: Java SE 19632022년 9월 20일2023년 3월 (OpenJDK)빈칸
오래된 버전, 지원 중단: Java SE 20642023년 3월 21일2023년 9월빈칸
현재 안정화 버전: Java SE 21 (LTS)652023년 9월 19일2028년 9월
최소 2030년 9월 (Amazon Corretto)[19]
2031년 9월 (오라클[3] 및 Azul)
배포 예정: Java SE 22662024년 3월2024년 9월[20]빈칸
범례:
오래된 버전
오래된 버전, 지원 중
최신 버전
최신 미리보기 버전
배포 예정

JDK 1.0

JDK 1.0
출시됨1996년 1월 23일
(28년 전)
(1996-01-23)

첫 번째 버전은 1996년 1월 23일에 출시되었다. 첫 번째 안정 버전인 JDK 1.0.2는 Java 1이라고 한다.

JDK 1.1

JDK 1.1
출시됨1997년 2월 19일
(27년 전)
(1997-02-19)

1997년 2월 19일 릴리스의 주요 추가 사항은 다음과 같다.

  • AWT 이벤트 모델의 광범위한 재정비
  • 언어에 추가된 내부 클래스
  • 자바빈즈
  • JDBC
  • RMI 및 직렬화
  • Introspection만 지원하는 리플렉션으로 런타임에 수정이 불가능했다. (객체를 반사적으로 수정하는 기능은 J2SE 1.2에서 AccessibleObject 클래스와 Field 클래스와 같은 하위 클래스를 도입하여 추가되었다.)
  • Symantec에서 JavaSoft용으로 제작한 Microsoft Windows 플랫폼의 JIT(Just In Time) 컴파일러
  • Taligent에서 시작된 국제화 및 유니코드 지원

J2SE 1.2

J2SE 1.2
코드명Playground
출시됨1998년 12월 8일
(25년 전)
(1998-12-08)

1998년 12월 8일의 릴리스와 J2SE 5.0을 통한 후속 릴리스는 소급하여 Java 2로 이름이 변경되었으며 버전 이름 "J2SE"(Java 2 Platform, Standard Edition)는 기본 플랫폼을 J2EE(Java 2 Platform, Enterprise Edition)와 구별하기 위해 JDK를 대체했다. 및 J2ME(Java 2 Platform, Micro Edition). 이것은 Java 플랫폼의 크기를 59개 패키지의 1520개 클래스로 세 배로 늘린 매우 중요한 Java 릴리스였다. 주요 추가 사항:

  • strictfp 키워드(JVM 17에 의해 사용되지 않는 키워드, 새 코드에서 사용하면 안 됨)
  • Swing 그래픽 API가 핵심 클래스에 통합되었다.
  • Sun의 JVM에 처음으로 JIT 컴파일러 탑재
  • 자바 플러그인
  • CORBA 상호 운용성을 위한 IDL 구현체인 Java IDL
  • 컬렉션 프레임워크

J2SE 1.3

J2SE 1.3
코드명Kestrel
출시됨2000년 5월 8일
(23년 전)
(2000-05-08)

2000년 5월 8일 릴리스에서 가장 주목할 만한 변경 사항은 다음과 같다.

  • HotSpot JVM 포함(HotSpot JVM은 J2SE 1.2 JVM용으로 1999년 4월에 처음 출시됨)
  • CORBA와의 선택적 호환성을 지원하도록 RMI가 수정되었다.
  • 코어 라이브러리에 포함된 JNDI(Java Naming and Directory Interface)(이전에는 확장으로 사용 가능)
  • 자바 플랫폼 디버거 아키텍처(JPDA)
  • 자바사운드
  • 합성 프록시 클래스

Java 1.3은 Microsoft Windows 95를 공식적으로 지원하는 마지막 Java 릴리스이다.

J2SE 1.4

J2SE 1.4
코드명Merlin
출시됨2002년 2월 6일
(22년 전)
(2002-02-06)
지원 종료됨
공개2008년 10월 (2008-10)
유료2013년 2월 (2013-02)

2002년 2월 6일 릴리스는 Java Community Process에서 JSR 59로 개발된 Java 플랫폼의 첫 번째 릴리스였다. 주요 변경 사항은 다음과 같다.

  • 언어 변경
    • assert 키워드(JSR 41에 지정됨)
  • 라이브러리 개선
    • Perl 정규식을 모델로 한 정규식
    • 예외 체인은 예외가 원래 하위 수준 예외를 캡슐화하도록 허용한다.
    • 인터넷 프로토콜 버전 6(IPv6) 지원
    • 비차단 I/O(NIO라고 함)(JSR 51에 지정됨)
    • 로깅 API(JSR 47에 지정됨)
    • JPEG 및 PNG와 같은 형식으로 이미지를 읽고 쓰기 위한 이미지 I/O API
    • 통합 XML 파서 및 XSLT 프로세서(JAXP)(JSR 5 및 JSR 63에 지정됨)
    • 통합 보안 및 암호화 확장(JCE, JSSE, JAAS)
    • Java Web Start 포함(Java Web Start는 J2SE 1.3용으로 2001년 3월에 처음 출시됨)(JSR 56에 지정됨)
    • 기본 설정 API(java.util.prefs)
    • Java 1.4에 대한 공개 지원 및 보안 업데이트는 2008년 10월에 종료되었다. Oracle 고객을 위한 유료 보안 업데이트는 2013년 2월에 종료되었다.

자바 SE 5

Java SE 5
코드명Tiger
출시됨2004년 9월 30일
(19년 전)
(2004-09-30)
지원 종료됨
공개2009년 11월 (2009-11)
유료2015년 4월 (2015-04)

2004년 9월 30일의 릴리스는 원래 번호가 1.5였으며 여전히 내부 버전 번호로 사용된다. 숫자는 "J2SE의 성숙도, 안정성, 확장성 및 보안 수준을 더 잘 반영"하도록 변경되었다. 이 버전은 JSR 176에 따라 개발되었다.

Java SE 5는 2008년 4월 8일에 공개 업데이트 종료 기간에 들어갔다. 업데이트는 2009년 11월 3일부로 더 이상 공개되지 않는다. 업데이트는 2015년 5월까지 유료 Oracle 고객에게 제공되었다.

자바 SE 5의 코드명 타이거(Tiger)는 몇 가지 중요한 새 언어 기능을 추가했다.

  • 제네릭: 컬렉션에 대한 컴파일 타임(정적) 자료형 안전성을 제공하고 대부분의 자료형 변환에 대한 필요성을 제거한다. (JSR 14에 의해 규정됨)
  • 메타데이터: 주석(annotation)이라고도 한다. 클래스 및 메서드와 같은 언어 구조에 추가 데이터로 태그를 지정할 수 있으며, 그런 다음 메타데이터 인식 유틸리티(JSR 175에서 규정)로 처리할 수 있다.
  • Autoboxing/unboxing: 기본 유형(예: int)과 기본 래퍼 클래스(예: Integer) 간의 자동 변환(JSR 201에 의해 규정됨)
  • 열거형: enum 키워드는 형식이 안전하고 정렬된 값 목록(예: Day.MONDAY, Day.TUESDAY 등)을 만든다. 이전에는 유형이 안전하지 않은 상수 정수 또는 수동으로 생성된 클래스(유형이 안전한 열거형 패턴)(JSR 201에 의해 지정됨)에 의해서만 이를 달성할 수 있었다.
  • Varargs: 메소드의 마지막 매개변수는 이제 유형 이름 뒤에 세 개의 점을 사용하여 선언할 수 있다. (예: void drawtext(String... lines)) 호출 코드에서 해당 유형의 매개 변수를 얼마든지 사용할 수 있으며 그런 다음 메서드에 전달할 배열에 배치하거나 호출 코드가 해당 유형의 배열을 전달할 수 있다.
  • 각 루프에 대해 향상됨: for 루프 구문은 표준 Collection 클래스(JSR 201에서 지정)와 같이 배열 또는 Iterable의 각 구성원을 반복하기 위한 특수 구문으로 확장된다.
  • 다중 스레드 Java 프로그램의 실행 시맨틱이 향상되었다. 새로운 Java 메모리 모델은 이전 사양의 복잡성, 효율성 및 성능 문제를 해결한다.
  • 정적 임포트

또한 표준 라이브러리에 다음과 같은 개선 사항이 있다.

  • RMI 객체에 대한 자동 스텁 생성
  • Swing: 신디사이저라고 하는 새로운 스킨 가능 모양과 느낌
  • 패키지 java.util.concurrent의 동시성 유틸리티
  • 다양한 입력 스트림 및 버퍼에서 데이터를 구문 분석하기 위한 스캐너 클래스

Java 5는 Microsoft Windows 98 및 Windows ME를 공식적으로 지원하는 Java의 마지막 릴리스이며, Windows Vista는 Java 5가 2009년 10월에 단종되기 전에 Java SE 5가 지원되는 최신 Windows 버전이었다.

Java 5 업데이트 5(1.5.0_05)는 Windows 95(Internet Explorer 5.5 설치) 및 Windows NT 4.0에서 작동하는 마지막 Java 릴리스이다.

Java 5는 Apple Mac OS X 10.4(Tiger)에서 처음 사용할 수 있었고 Apple Mac OS X 10.5(Leopard)에 설치된 기본 Java 버전이었다.

Java 1.5에 대한 공개 지원 및 보안 업데이트는 2009년 11월에 종료되었다. Oracle 고객을 위한 유료 보안 업데이트는 2015년 4월에 종료되었다.

자바 SE 6

Java SE 6
코드명Mustang
출시됨2006년 11월 11일
(17년 전)
(2006-11-11)
지원 종료됨
공개2013년 2월 (2013-02)

2006년 12월 11일에 릴리스된 버전에서 Sun은 "J2SE"라는 이름을 Java SE로 바꾸고 버전 번호에서 ".0"을 삭제했다. 개발자를 위한 내부 번호 지정은 1.6.0으로 유지된다.

이 버전은 JSR 270에서 개발되었다.

개발 단계에서 개선 사항 및 버그 수정을 포함한 새로운 빌드가 거의 매주 릴리스되었다. 베타 버전은 2006년 2월과 6월에 출시되어 2006년 12월 11일에 최종 출시되었다.

이 버전에 포함된 주요 변경 사항:

이전 Win9x 버전에 대한 지원이 중단되었다. 비공식적으로 Java 6 Update 7은 이러한 버전의 Windows에서 작동하는 것으로 나타난 Java의 마지막 릴리스였다. 이것은 업데이트 10의 주요 변경 사항 때문이라고 간주된다.

  • 스크립팅 언어 지원(JSR 223): 스크립팅 언어 및 기본 제공 Mozilla JavaScript Rhino 통합과의 긴밀한 통합을 위한 일반 API이다.
  • 핵심 플랫폼 및 Swing의 극적인 성능 향상.
  • JAX-WS(JSR 224)를 통해 향상된 웹 서비스 지원.
  • JDBC 4.0 지원(JSR 221).
  • Java 컴파일러 API(JSR 199): Java 프로그램이 프로그래밍 방식으로 Java 컴파일러를 선택하고 호출할 수 있도록 하는 API이다.
  • JAXB를 버전 2.0으로 업그레이드: StAX 파서의 통합을 포함한다.
  • 플러그형 주석 지원(JSR 269).
  • API에 SwingWorker 통합, 테이블 정렬 및 필터링, 진정한 Swing 이중 버퍼링(회색 영역 효과 제거)과 같은 많은 GUI 개선 사항이 있다.
  • JVM 개선 사항에는 동기화 및 컴파일러 성능 최적화, 새로운 알고리즘 및 기존 가비지 수집 알고리즘에 대한 업그레이드, 애플리케이션 시작 성능이 포함된다.

Java 6은 64비트(Core 2 Duo 이상) 프로세서 시스템에서 실행되는 Mac OS X 10.5(Leopard)에 설치할 수 있다. Java 6은 Mac OS X 10.6(Snow Leopard)을 실행하는 32비트 및 64비트 시스템에서도 모두 지원된다.

Java 6은 2013년 2월에 지원 수명이 종료되었으며 이때 보안 업데이트를 포함한 모든 공개 업데이트가 중지될 예정이었다. Oracle은 2013년 3월과 4월에 Java 6에 대한 두 가지 업데이트를 추가로 발표하여 일부 보안 취약점을 패치했다.

자바 6 업데이트

Java 6 릴리스 이후 Sun 및 이후 Oracle은 공용 API를 변경하지 않으면서 최종 사용자 사용성을 향상시키거나 버그를 수정하는 몇 가지 업데이트를 릴리스했다.

자바 SE 7

Java SE 7
코드명Dolphin[21]
출시됨2011년 7월 28일
(12년 전)
(2011-07-28)
지원 종료됨
공개2015년 4월 (2015-04)
유료2022년 6월 (2022-06)

Java 7은 2011년 7월 7일에 시작되어 2011년 7월 28일에 개발자가 사용할 수 있게 된 주요 업데이트이다. 개발 기간은 13개의 이정표로 구성되었다. 2011년 6월 6일에 13개의 이정표 중 마지막 이정표가 완료되었다. 평균적으로 마일스톤당 8개의 빌드(일반적으로 개선 사항 및 버그 수정 포함)가 릴리스되었다. OpenJDK 7 프로젝트의 기능 목록에는 많은 변경 사항이 나열되어 있다.

Java 7의 추가 사항은 다음과 같다.

  • 현재 다국어 가상 머신에서 수행되는 프로토타이핑 작업에 이어 JSR-292의 새로운 invokedynamic 바이트코드를 사용하여 동적 언어에 대한 JVM 지원
  • 압축된 64비트 포인터(-XX:+UseCompressedOops가 있는 Java 6에서 사용 가능)
  • 사소한 언어 변경 사항(Coin이라는 프로젝트로 그룹화됨):
    • switch 내 문자열
    • try-with-resources 문이라고도 하는 try-statement의 자동 리소스 관리
    • 일반 인스턴스 생성을 위한 향상된 유형 추론(다이아몬드 연산자 <>)
    • 간소화된 varargs 메서드 선언
    • 이진 정수 리터럴
    • 숫자 리터럴에서 밑줄 허용
    • 향상된 유형 검사를 통해 여러 예외 유형 포착 및 예외 다시 발생
  • JSR 166에 따른 동시성 유틸리티
  • 새로운 파일 I/O 라이브러리(JSR 203에서 정의)는 여러 파일 시스템, 파일 메타데이터 및 심볼릭 링크에 대한 지원을 추가한다. 새로운 패키지는 java.nio.file, java.nio.file.attribute 및 java.nio.file.spi이다.
  • Timsort는 병합 정렬 대신 객체의 컬렉션 및 배열을 정렬하는 데 사용된다.
  • 타원 곡선 암호화 알고리즘에 대한 라이브러리 수준 지원
  • 최신 GPU에 특정한 기능 처리를 개선하는 Java 2D용 XRender 파이프라인
  • 버전 6u10에서 지원되지 않는 API로 원래 구현된 그래픽 기능을 위한 새로운 플랫폼 API
  • SCTP 및 소켓 다이렉트 프로토콜을 포함한 새로운 네트워크 프로토콜에 대한 향상된 라이브러리 수준 지원
  • XML 및 유니코드에 대한 업스트림 업데이트
  • Java 배포 규칙 세트

Lambda(Java의 람다 함수 구현), Jigsaw(Java의 모듈 구현) 및 Coin의 일부는 Java 7에서 제외되었으며 Java 8의 일부로 릴리스되다.(Jigsaw는 Java 9에서 릴리스됨)

Java 7은 2012년 4월부터 Java 8이 출시될 때까지 java.com에서 다운로드하는 기본 버전이었다.

자바 7 업데이트

Oracle은 제품의 공개 가용성이 종료되는 2015년 4월까지 분기별로 Java 7 제품군에 대한 공개 업데이트를 발표했다. 2022년 7월까지 계속되는 JDK 7의 추가 업데이트는 지원 계약이 있는 고객에게만 제공된다.

자바 SE 8

Java SE 8
LTS 버전
출시됨2014년 3월 18일
(10년 전)
(2014-03-18)
JEP 수8

Java 8은 2014년 3월 18일에 릴리스되었으며 Java 7용으로 계획되었지만 나중에 연기된 일부 기능이 포함되었다.

기능에 대한 작업은 JEP(JDK Enhancement Proposals) 측면에서 구성되었다.

Java 8은 Windows XP에서 지원되지 않지만 JDK 8 업데이트 25부터는 Windows XP에서 계속 설치 및 실행할 수 있다. JDK 8의 이전 업데이트는 보관된 zip 형식 파일을 다운로드하고 실행 파일에 대한 압축을 풀어 XP에서 실행할 수 있다. XP에서 실행할 수 있는 Java 8의 마지막 버전은 업데이트 251이다. 그러나 구성 요소 호환성은 초기 빌드에서 지원되지 않는 OS에서 중단되기 시작한다. Java 8 업데이트는 계속 개발 중이다.

2014년 10월부터 Java 8은 공식 웹 사이트에서 다운로드할 수 있는 기본 버전이었다.(Java 9를 대체하는 다운로드) 오라클은 개인 사용자를 위해 무기한으로 Java SE 8의 공개 업데이트 및 자동 업데이트를 계속 제공할 예정이다.

자바 SE 9

Java SE 9
출시됨2017년 9월 21일
(6년 전)
(2017-09-21)
JEP 수9
지원 종료됨
공개2018년 3월 (2018-03)

Java SE 9는 2017년 9월 21일에 사용할 수 있게 되었다. Java Executive Committee가 Project Jigsaw의 현재 구현체에 대한 논란의 여지가 있는 수용으로 인해 Oracle이 몇 가지 미결 문제 및 우려 사항을 수정하고 몇 가지 중요한 기술 질문을 수정하게 되었다. 2017년 6월 마지막 날 Java Community Process는 제안된 모듈 시스템 체계에 대해 거의 만장일치로 동의했다.

첫 번째 Java 9 릴리스 후보는 2017년 8월 9일에 릴리스되었다. Java 9의 첫 번째 안정적인 릴리스는 2017년 9월 21일에 릴리스되었다.

역사

JavaOne 2011에서 Oracle은 2016년에 Java 9용으로 출시할 기능에 대해 논의했다. Java 9에는 멀티 기가바이트 힙에 대한 더 나은 지원, 더 나은 네이티브 코드 통합, 다른 기본 가비지 콜렉터(G1, "짧은 응답 시간") 및 자체 조정 JVM. 2016년 초에 Java 9의 출시 일정이 2017년 3월로 재조정되었으며 나중에 2017년 7월로 4개월 더 연기되었다.

자바 SE 10

Java SE 10
출시됨2018년 3월 20일
(6년 전)
(2018-03-20)
JEP 수12
지원 종료됨
공개2018년 9월 (2018-09)

OpenJDK 10은 2018년 3월 20일에 릴리스되었으며 12개의 새로운 기능이 확인되었다. 이러한 기능은 다음과 같다.

자바 SE 11

Java SE 11
LTS 버전
출시됨2018년 9월 25일
(5년 전)
(2018-09-25)
JEP 수17
제거된 사항
저명한 사항Java applets, Java Web Start, JavaFX, JavaEE, and CORBA modules

JDK 11은 2018년 9월 25일에 릴리스되었으며 현재 버그 수정을 위해 버전이 열려 있다. LTS 또는 장기 지원을 제공한다. 그 중에서도 Java 11에는 다음과 같은 여러 가지 새로운 기능이 포함되어 있다.

이전 릴리스의 여러 기능이 삭제되었다. 특히 Java 애플릿과 Java Web Start는 더 이상 사용할 수 없다. JavaFX, Java EE 및 CORBA 모듈이 JDK에서 제거되었다.

자바 SE 12

Java SE 12
출시됨2019년 3월 19일
(5년 전)
(2019-03-19)
JEP 수8
추가된 사항
프리뷰Enhanced switch statements
지원 종료됨
공개2019년 9월 (2019-09)

JDK 12는 2019년 3월 19일에 릴리스되었다. 그 중에서도 Java 12에는 다음과 같은 여러 가지 새로운 기능이 포함되어 있다.

프리뷰 기능 JEP 325는 switch 문을 확장하여 표현식으로도 사용할 수 있도록 하고 오른쪽이 표현식인 새로운 형태의 case 레이블을 추가한다. break 문이 필요하지 않는다. 복잡한 표현식의 경우 yield 문을 사용할 수 있다. 이는 Java SE 14에서 표준이 된다.

자바 SE 13

Java SE 13
출시됨2019년 9월 17일
(4년 전)
(2019-09-17)
JEP 수5
추가된 사항
프리뷰Enhanced switch statements, text blocks
지원 종료됨
공개2023년 3월 (2023-03)[22]

JDK 13은 2019년 9월 17일에 릴리스되었다. Java 13에는 다음과 같은 새로운 기능과 "수백 개의 작은 개선 사항 및 수천 개의 버그 수정"이 포함되어 있다.

JEP 355 텍스트 블록은 여러 줄 문자열 리터럴을 허용한다.

String html = """              <html lang="en">                  <body>                      <p>Hello, world</p>                  </body>              </html>              """;

자바 SE 14

Java SE 14
출시됨2020년 3월 17일
(4년 전)
(2020-03-17)
JEP 수16
추가된 사항
저명한 사항Helpful NullPointerExceptions, enhanced switch statements
프리뷰Pattern matching for instanceof, records, text blocks
인큐베이팅jpackager, Foreign memory access
제거된 사항
저명한 사항Remove Concurrent Mark Sweep garbage collector
지원 종료됨
공개2020년 9월 (2020-09)

JDK 14는 2020년 3월 17일에 릴리스되었다. Java 14에는 다음과 같은 새로운 기능과 "수백 개의 작은 개선 사항 및 수천 개의 버그 수정"이 포함되어 있다.

자바 SE 15

Java SE 15
출시됨2020년 9월 15일
(3년 전)
(2020-09-15)
JEP 수14
추가된 사항
저명한 사항Hidden classes, ZGC (garbage collector), Shenandoah (garbage collector), text blocks
프리뷰Sealed classes, pattern matching of instanceof, records
인큐베이팅Foreign-memory access
제거된 사항
저명한 사항JavaScript engine, Solaris and SPARC ports
지원 종료됨
공개2023년 3월 (2023-03)[22]

JDK 15는 2020년 9월 15일에 릴리스되었다. Java 15는 다음을 추가한다. 여러 줄 문자열 리터럴(일명 텍스트 블록)을 지원한다. Shenandoah 및 Z 가비지 컬렉터(후자는 ZGC로 축약되기도 함)가 이제 프로덕션에서 사용할 준비가 되었다.(즉, 더 이상 실험용으로 표시되지 않음) Oracle의 Solaris 운영 체제(및 SPARC CPU)에 대한 지원이 중단되었다.(예: Java 11에서는 계속 사용 가능) Nashorn JavaScript 엔진이 제거되었다. 일부 루트 CA 인증서도 제거했다.

자바 SE 16

Java SE 16
출시됨2021년 3월 16일
(3년 전)
(2021-03-16)
JEP 수17
추가된 사항
저명한 사항Windows/AArch64 Port, jpackager, pattern matching for instanceof, records
프리뷰Sealed classes
인큐베이팅Foreign linker, Foreign-memory access
지원 종료됨
공개2021년 9월 (2021-09)

JDK 16은 2021년 3월 16일에 릴리스되었다. Java 16은 Ahead-of-Time 컴파일(및 Graal JIT) 옵션을 제거한다. Java 구현 자체는 여전히 C++로 작성되었으며 Java 16부터 최신 C++14(예: C++17 또는 C++20은 아님)가 허용된다. 코드도 GitHub로 이관하여 소스 제어 시스템에서 Mercurial을 삭제했다.

자바 SE 17

Java SE 17
LTS 버전
출시됨2021년 9월 14일
(2년 전)
(2021-09-14)
JEP 수14
추가된 사항
저명한 사항macOS/AArch64 Port, sealed classes
프리뷰Switch pattern matching
인큐베이팅Vector API, Foreign function & memory API
제거된 사항
저명한 사항AOT compiler, RMI activation, strictfp keyword made obsolete (PEP 306)

JDK 17은 2021년 9월 이후 현재 LTS(장기 지원) 릴리스이다. Java 17은 새로운 6개월 릴리스 주기(첫 번째는 Java 11)로 전환한 이후 두 번째 장기 지원(LTS) 릴리스이다.

자바 SE 18

Java SE 18
출시됨2022년 3월 22일
(2년 전)
(2022-03-22)
JEP 수9
추가된 사항
저명한 사항
  • UTF by default
  • Javadoc code snippets
프리뷰Switch pattern matching
인큐베이팅
  • Vector API
  • Foreign function & memory API
제거된 사항
저명한 사항Deprecated finalization for removal
지원 종료됨
공개2022년 9월 (2022-09)

JDK 18은 2022년 3월 22일에 릴리스되었다.

자바 SE 19

Java SE 19
출시됨2022년 9월 20일
(18개월 전)
(2022-09-20)
JEP 수7
추가된 사항
프리뷰
  • Foreign function & memory API
  • Switch pattern matching
인큐베이팅
  • Vector API
  • Structured concurrency
지원 종료됨
공개2023년 3월 (2023-03)[22]

JDK 19는 2022년 9월 20일에 릴리스되었다.

Jep 405는 레코드 패턴을 허용하여 instanceof 연산자의 패턴 일치 기능을 확장하고 표현식을 전환하여 레코드의 구성 요소를 명시적으로 참조하는 레코드 패턴을 포함한다.

자바 SE 20

Java SE 20
출시됨2023년 3월 21일
(12개월 전)
(2023-03-21)
JEP 수7
추가된 사항
인큐베이팅Scoped values
지원 종료
공개2023년 9월 (2023-09)

Java 20은 2023년 3월에 출시되었다.

자바 SE 21

Java SE 21
LTS 버전
출시중2023년 9월 19일
(6개월 전)
(2023-09-19)
JEP 수15
추가된 사항
저명한 사항Record patterns, pattern matching for switch, virtual threads
프리뷰String templates, unnamed classes and main methods
인큐베이팅Vector API

Java 21은 2023년 9월 19일에 출시되었다.[23] 프리뷰 및 인큐베이팅 JEP만 있는 Java 20과 비교하면 미리 보기 또는 인큐베이팅 상태가 아닌 8개의 JEP가 있다. Java 21에는 Java 17(스위치 문에 대한 패턴 일치) 및 Java 19(레코드 패턴)에서 처음으로 미리 본 기능이 도입되었다. x86 기반 윈도우 32비트 버전은 제거를 위해 구식화되었다.

자바 SE 22

Java SE 22
출시중2024년 3월
(1개월 전)
(2024-03)

2023년 6월 기준으로 자바 22의 사양은 아직 확정되지 않았다. 자바 22는 2024년 3월 출시될 예정이다.[24]

구현체

공식적으로 지원되는 Java 플랫폼은 Sun에서 처음 개발되어 현재 Oracle에서 관리하고 있는 Java SE이다. 릴리스는 개방형 개발 모델을 사용하는 무료 오픈 소스 프로젝트인 OpenJDK 프로젝트를 기반으로 한다. 그러나 부분적으로 독점 소프트웨어로서의 Java의 초기 역사로 인해 다른 Java 구현체가 존재한다. 대조적으로 일부 구현체는 표준 구현체보다 약간의 이점을 제공하기 위해 만들어졌으며 종종 일부 학술 또는 기업 후원 연구의 결과이다. 많은 Linux 배포판에는 Red Hat이 시작한 IcedTea 프로젝트를 통한 OpenJDK 빌드가 포함되어 있어 보다 간단한 빌드 및 통합 환경을 제공한다.

Visual J++ 및 Microsoft Java Virtual Machine은 호환되지 않는 구현체로 생성되었다. Sun v. Microsoft 소송 후 Microsoft는 이를 포기하고 .NET 플랫폼 작업을 시작했다. 2021년에 Microsoft는 먼저 Java 11용 호환 "Microsoft Build of OpenJDK" 배포를 시작한 다음 Java 17용 배포를 시작했다. 해당 빌드는 Windows뿐만 아니라 Linux 및 macOS도 지원한다.

Azul의 Zing과 같은 다른 독점 Java 구현체를 사용할 수 있다. Azul은 Zulu라는 이름으로 인증된 오픈 소스 OpenJDK 빌드를 제공한다.

OpenJDK가 출시되기 전에는 Sun의 구현체가 여전히 독점적이었지만 GNU Classpath 프로젝트는 Java 플랫폼의 무료 오픈 소스 구현체를 제공하기 위해 만들어졌다. OpenJDK가 공식 참조 구현체가 된 JDK 7 릴리스 이후 GNU Classpath 프로젝트의 원래 동기는 거의 완전히 사라졌고 마지막 릴리스는 2012년이었다.

Apache Harmony 프로젝트는 OpenJDK 출시 직전에 시작되었다. Sun의 초기 소스 코드 릴리스 이후 Harmony 프로젝트는 OpenJDK용으로 선택된 보호 라이선스와 달리 느슨한 라이선스로 구현체를 제공하기 위해 계속 노력했다. 구글은 나중에 안드로이드를 개발하여 느슨한 라이선스로 출시했다. Android는 Harmony 프로젝트의 일부를 Google 자체의 Dalvik 가상 머신 및 ART로 보완했다. 이후 Apache Harmony는 사용 중지되었으며 Google은 Harmony 구성 요소를 OpenJDK의 동등한 구성 요소로 전환했다.

Jikes와 Jikes RVM은 모두 IBM이 개발한 오픈 소스 연구 프로젝트이다.

독점 소프트웨어로 시작했지만 지금은 오픈 소스인 몇 가지 다른 구현체가 존재한다. IBM은 처음에 OpenJ9을 독점 J9로 개발했지만 이후 프로젝트 라이선스를 다시 부여하고 이클립스 재단에 기부했다. JRockit은 Oracle에서 인수하여 후속 OpenJDK 버전에 통합된 독점 구현체이다.

각주

외부 링크