JDK 버전 별 특징
JAVA 버전
발표일
특징
비고
Java SE 17
(LTS)
2021년 9월 15일
Java SE 16
2021년 3월 16일
자바 11부터 시작했으며 15부터 정식으로 도입한 ZGC 기능이 향상되었다.
유닉스 도메인 소켓이 지원된다.
ARM 64비트 윈도우 운영체제가 지원된다. MacOS의 경우 실리콘 맥 지원이 시험 빌드에서 네이티브 지원을 시작했다.
자바 15의 외부메모리 접근 인큐베이팅 2차
자바 14의 패턴 매칭이 정식 기능으로 추가
자바 14에 추가된
Record
형식 정식 지원자바 9부터 추가되어 자바 내부 API 접근에 대한 경고 무시 (
--illegal-access
) 기능이 강화되어 내부 API 접근 시도 시 기본적으로 오류와 함께 자바 프로그램이 종료될 수 있도록 강화자바 15에 추가된 봉인 클래스의 2차 미리보기
Java SE 15
2020년 9월 15일
EdDSA 암호화 알고리즘 추가
패턴 매칭
스케일링 가능한 낮은 지연의 가비지 컬렉터 추가(ZGC)
Solaris 및 SPARC 플랫폼 지원 제거
외부 메모리 접근 API (인큐베이팅)
다중 텍스트 블
클래스 봉인 (미리보기)
상속 가능한 클래스를 지정할 수 있는 봉인 클래스가 제공된다.
상속 가능한 대상은 상위 클래스 또는 인터페이스 패키지 내에 속해 있어야 한다.
package com.example;
public sealed class Animal Dog, com.example.Monkey, com.example.Leopard { // ... }
String html = """ Hello, world """;
Java SE 14
2020년 3월 18일
- instanceof 패턴 매칭
- record 타입 지원
if (!(obj instanceof String s)) { .. s.contains(..) .. } else { .. s.contains(..) .. }
record Point(int x, int y) { }
Java SE 13
2019년 9월 17일
- switch문에 yield 예약어 추가 - ZGC 추가
var a = switch (day) { case MONDAY, FRIDAY, SUNDAY: yield 6; case TUESDAY: yield 7; case THURSDAY, SATURDAY: yield 8; case WEDNESDAY: yield 9; };
Java SE 12
2019년 3월 19일
- switch문 확장 ( -> ) - 가비지 컬렉터 개선 - 마이크로 벤치마크 툴 추가 - 성능개선 - Shenandoah GC 추
- Switch문의 확장
switch (day) {
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);
}
Java SE 11
(LTS)
2018년 9월 25일
- lambda 파라미터에 대한 지역변수 문법 - 엡실론 가비지 컬렉터 - HTTP 클라이언트 표준화 - 기본 GC > G1 GC
- OracleJDK의 독점기능이 OpenJDK에 이식 (OracleJDK와 OpenJDK가 동일해짐) - 2019년 1월부터 OracleJDK가 유료 모델로 전환 - eclipse 재단으로 넘어간 Java EE 삭제
엡실론 가비지 수집기는 할당을 처리하지만 메모리를 회수하지는 않는고 힙이 소진되면 JVM이 종료된다. 엡실론은 수명이 짧은 서비스와 가비지를 사용하지 않는 것으로 알려진 애플리케이션에 유용하다.
Epsilon GC를 사용할 경우 우리가 작성한 어플리케이션이 외부 환경으로부터 고립된 채로 실행되기 때문에 실제 내 어플리케이션이 얼마나 메모리를 사용하는 지에 대한 임계치나 어플리케이션 퍼포먼스 등을 보다 정확하게 측정할 수 있다.
- JavaFX도 JDK에서 분리하여 별도 모듈 제공 - 람다 파라미터에 대한 지역변수 문법 : (var x, var y) -> x.process(y) => (x, y) -> x.process(y)
IntStream.of(1, 2, 3).filter((var i) -> i % 2 == 0).forEach(System.out::println);
IntStream.of(1, 2, 3).filter(i -> i % 2 == 0).forEach(System.out::println);
Java SE 10
2018년 3월 20일
- var 키워드를 이용한 지역변수 타입추론 - 병렬처리 가비지 컬렉터 - 개별 Thread로 분리된 Stop-The World - 루트 CA - JVM heap영역을 시스템 메모리가 아닌 다른종류의 메모리에도 할당
- JDK 레토지토리가 하나로 통합 - Java기반 JIT 컴파일러 - 이전 버전 deprecated처리된 API 삭제
ㆍvar 키워드를 이용한 지역변수 선언 및 타입추론 가능
ㆍ불변(Unmodifiable) Collection 향상
Java SE 9
2017년 9월 21일
- Jingsaw 기반 런타임 모듈화(module) - JShell 추가(인터프리터 셀처럼 사용) - private interface method - immutable collection - 통합 로깅 - HTTP/2 - HTML 5 JavaDoc - 프로퍼티 파일에 UTF-8 지원
- 버전을 1.x로 하지 않고 9.0으로 변경 - Ahead-of-time compiler 시범 적용 - Java Applet 기능 종료 - 64비트 버전만 출시
Java SE 8
(LTS)
2014년 3월 18일
- lambda expression - type annotation - stream api 추가 - repeating annotation - static link library - interface default method - unsigned integer 계산 - 날짜와 시간 API(new) -> JodaTime - rhino 대신 nashorn javascript 엔진 탑재
- 32비트 지원 마지막 공식버전
- JDK는 2개 버전으로 나뉨. 하나는 폐쇄적인 상업 코드 기반의 Oracle JDK, 하나는 오픈 소스 기반의 OpenJDK이다.
- Oracle JDK에 존재하고 OpenJDK에는 없는 대표적 기능으로 글꼴 라이브러리와 Java Web Start가 있다.
서버 애플리케이션 개발에는 쓰이지 않는 기능들이다.
ㆍLambda 및 함수형프로그래밍, Default Method Interface, 메소드 참조
ㆍJEP에 의해서 새로운 기능들이 발의되기 시작.
ㆍAPI : Nashorn (JS엔진), new Date and Time API, Stream API, Collection에 대한 함수형화 (Interface에 default로 인해 가능)
새로운 날짜와 시간 API인 java.time 패키지를 제공
* 기존 Calendar 클래스에서는 월(month)을 나타낼 때 1월부터 12월을 0부터 11까지로 표현해야 하는 불편함이 있다.
기존 Calendar 인스턴스는 불변 객체(immutable object)가 아니라서 값이 수정될 수 있습니다.
LocalDate today = LocalDate.now();
System.out.println("올해는 " + today.getYear() + "년입니다.");
Java SE 7
2011년 7월 7일
- diamond operator <> - try-resource - multi-catch - switch문에 String 사용 - concurrency API(new) - File NIO(new) - Java2D 지원 - dynamic language 지원
Java SE 6
2006년 12월 11일
- interface에 @Override 추가됨 - JDBC 4.0 - Scripting Language Support - Java Compiler API - pluggable annotation
- J2SE -> Java SE로 변경
J2SE 5
2004년 9월 30일
- generics - annotation - auto boxing/unboxing - enumeration - 가변길이 파라미터 - static import - concurrency API
- 버전중 1을 빼고 표기 (내부적으로는 1.5, 1.6, 1.7 등을 사용)
J2SE 1.4
2002년 2월 6일
- assert - regular expression - NIO - IPv6 - XML API - JCE - JSSE - JAAS - Java Web Start
J2SE 1.3
2000년 3월 8일
- HotSpot JVM - JNDI - JPDA - JavaSound
- RMI가 CORBA 지원
J2SE 1.2
1998년 12월 8일
- strictfp - SWING GUI - JIT CORBA - Collections
- JDK -> J2SE로 변경 (J2SE 5까지 사용) - 1999년 업데이트를 통한HotSpot JVM
JDK 1.1
1997년 2월 19일
- inner class - JavaBeans - RMI - reflection - unicode - 국제화(internationallization)
JDK 1.0
1996년 1월 23일
- 이전에 Oak로 불렸으나, 안정화 작업을 거친 1.0.2부터 JAVA로 변경
JDK 1.0a2
1995년 5월 23일
- 자바 언어가 정식으로 발표된 날
JDK 1.0a
1994년
Last updated
Was this helpful?