자바 언어는 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 커뮤니티가 작업을 수행할 것으로 예상된다.
자바 17 최신(3차) LTS가 2021년 9월 14일에 출시되었다.
자바 19 일반 가용성(General Availability, GA)은 2022년 9월 20일에 시작되었다.
2022년 7월 (Oracle)[3] 2020년 6월 (레드햇)[7] 2027년 12월 (Azul)[6]
오래된 버전, 지원 중: Java SE 8 (LTS)
52
2014년 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]
(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]
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에 의해 사용되지 않는 키워드, 새 코드에서 사용하면 안 됨)
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월에 종료되었다.
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의 추가 업데이트는 지원 계약이 있는 고객에게만 제공된다.
Java 8은 2014년 3월 18일에 릴리스되었으며 Java 7용으로 계획되었지만 나중에 연기된 일부 기능이 포함되었다.
기능에 대한 작업은 JEP(JDK Enhancement Proposals) 측면에서 구성되었다.
JSR 335, JEP 126: Project Lambda 및 기존 구현체를 손상시키지 않고 인터페이스에 메서드를 추가하는 데 사용할 수 있는 기본 메서드(가상 확장 메서드)에서 람다 식(공식적으로는 람다 식, 비공식적으로는 클로저)에 대한 언어 수준 지원. 람다 식에 대한 지원을 추가할지 여부에 대해 Java 커뮤니티에서 지속적인 논쟁이 있었다. Sun은 나중에 람다 표현식이 Java에 포함될 것이라고 선언하고 기능을 개선하기 위해 커뮤니티 의견을 요청했다. 람다 식을 지원하면 컬렉션에 대한 MapReduce에서 영감을 받은 변환과 같은 요소 스트림에 대한 기능 스타일 작업도 가능하다. API 작성자는 기본 메서드를 사용하여 이전 코드를 손상시키지 않고 인터페이스에 새 메서드를 추가할 수 있다. 주요 의도는 아니었지만 기본 메서드는 동작의 다중 상속(상태는 아님)에도 사용할 수 있다.
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일 (7년 전)(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는 제안된 모듈 시스템 체계에 대해 거의 만장일치로 동의했다.
JSR 376: Project Jigsaw에서 JDK 모듈화(Java 플랫폼 모듈 시스템)
첫 번째 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일 (7년 전)(2018-03-20)
JEP 수
12
지원 종료됨
공개
2018년 9월 (2018-09)
OpenJDK 10은 2018년 3월 20일에 릴리스되었으며 12개의 새로운 기능이 확인되었다. 이러한 기능은 다음과 같다.
프리뷰 기능 JEP 325는 switch 문을 확장하여 표현식으로도 사용할 수 있도록 하고 오른쪽이 표현식인 새로운 형태의 case 레이블을 추가한다. break 문이 필요하지 않다. 복잡한 표현식의 경우 yield 문을 사용할 수 있다. 이는 Java SE 14에서 표준이 된다.
JDK 15는 2020년 9월 15일에 릴리스되었다. Java 15는 다음을 추가한다. 여러 줄 문자열 리터럴(일명 텍스트 블록)을 지원한다. Shenandoah 및 Z 가비지 컬렉터(후자는 ZGC로 축약되기도 함)가 이제 프로덕션에서 사용할 준비가 되었다.(즉, 더 이상 실험용으로 표시되지 않음) Oracle의 Solaris 운영 체제(및 SPARC CPU)에 대한 지원이 중단되었다.(예: Java 11에서는 계속 사용 가능) Nashorn JavaScript 엔진이 제거되었다. 일부 루트 CA 인증서도 제거했다.
JDK 16은 2021년 3월 16일에 릴리스되었다. Java 16은 Ahead-of-Time 컴파일(및 Graal JIT) 옵션을 제거한다. Java 구현 자체는 여전히 C++로 작성되었으며 Java 16부터 최신 C++14(예: C++17 또는 C++20은 아님)가 허용된다. 코드도 GitHub로 이관하여 소스 제어 시스템에서 Mercurial을 삭제했다.
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비트 버전은 제거를 위해 구식화되었다.
공식적으로 지원되는 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 버전에 통합된 독점 구현체이다.
↑ 가나다“Support roadmap for the Microsoft Build of OpenJDK”. 《docs.microsoft.com》 (미국 영어). 2021년 8월 3일에 확인함. Support for OpenJDK 17 on Windows x86 32 bit will end on January 10th, 2023 following the End of Life support of Windows 32 bit versions.