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?