초기 버전 표기법은 1.x 로 JDK 1.0, 1.1 등으로 표기했다. JDK 1.2를 발표하며 J2SE(Java2 Standard Edition)로 변경하게 된다. 이후 2006년 JDK 1.6 부터 Java SE 6(Java Standard Edition 6)으로 변경되었다.
공식적인 명은 Java SE 8 로 1.8까지는 1.x의 버전 표기법도 사용되었다. Java SE 9 이후부터는 1.x 표기법을 버리고 한자릿수 표기법으로 고정되었다.
Java 버전 번호
Jave SE 플랫폼 버전을 나타내는 숫자. Java SE 8 플랫폼은 두 가지 제품 JDK8 과 JRE 8 로 구현되어 있다.
Platform / Product
Full Name
Abbreviation
Platform Name
Java Platform, Standard Edition 8
Java SE 8
Product that implements the platform
Java SE Development Kit 8
JDK 8
Product that implements the platform
Java SE Runtime Environment 8
JRE 8
Java 버전 문자열(스트링)
일부 오라클 제품은 버전 번호와 관련된 버전 문자열 버전도 제공한다. 버전 문자열 형식은 1.x 또는 1.x.0 형식으로 x는 제품 버전 번호이다.
오라클은 주기적으로 업데이트를 제공하여 업데이트 시 버전 문자열에 업데이트 버전 번호가 포함된다. 따라서 JDK 8에서 5를 업데이트하면 JDK 8u5, 버전 문자열은 1.8.0_5가 된다.
JDK와 JRE, JVM의 차이점
JDK (Java Development Kit) 자바 개발 키트의 약자로, 자바 개발을 위한 SDK 집합이다. 자바 개발 시 필요한 라이브러리와 javac, javadoc 등의 개발 도구들과 자바 실행을 위한 JRE가 포함되어 있다. * SDK(Software Development Kit)란 하드웨어 플랫폼, OS 또는 프로그래밍 언어 제작사가 제공하는 툴이다. 다양한 종류의 JDK가 존재한다.
Oracle JDK : 오라클에서 제공하는 JDK로 유료 라이선스 구독이 필요하다.
Open JDK : 가장 유명한 무료 JDK
Azul Zulu : 인지도가 높은 JDK 중 하나로, Mac에서 사용할 수 있는 바이너리를 제공한다.
Amazon Corretto : AWS에서 제공하는 JDK로 AWS 환경에서 쉽게 사용 가능하고 그 외의 환경에서도 사용 가능하다.
Temurin (AdoptOpenJDK) : Eclipse 에서 제공하는 JDK
JRE (Java Runtime Environment) 자바 실행 환경의 약자로, JVM과 자바 어플리케이션 실행에 필요한 라이브러리 등을 함께 묶어 배포한 것이다. JRE는 기본적으로 JDK에 포함되어 있으며 기존에는 JDK 외에 개별적으로 설치 가능했으나 JDK 11부터는 따로 제공하지 않는다.
JVM (Java Virtual Machine) 자바 가상 머신의 약자로, 자바를 실행시키는 프로그램이다. 자바로 작성된 모든 프로그램은 JVM에서만 실행될 수 있다. 이를 통해 자바는 OS의 제약 없이 JVM을 사용하여 모든 플랫폼에서 실행 가능하다. 하지만 JVM 자체는 OS 종속적이므로 각 OS에 맞는 JVM이 필요하다.
자바 버전에 대해
자바는 6개월마다 업데이트되며 이전 버전과 호환된다. LTS 버전의 경우 2~3년마다 출시되며 출시 이후 8년간 지원된다. 현재 24년 6월 기준 가장 최근의 버전은 3월에 GA된 Java SE 22이며 LTS 버전은 17이다.
** 버전 표기 방법
SNAPSHOT : 안정화되지 않은 버전
M(Milestone) : 팀이나 프로젝트마다 정해진 주기마다 배포하는 버전, 주요 기능 구현 후 개발자들에게 피드백을 받는 버전
RC(Release Candidate) : 기능이 안정화되고 앞서 발생한 문제들이 해결된 버전으로 릴리즈 직전의 버전
GA(General Availability) : 대부분의 기능과 버그들이 안정화된 버전으로 테스트 완료된 정식 릴리즈 버전
LTS(Long Term Support) : deprecated 되지 않고 (지원 종료되지 않고) 장기간 지원되는 버전. 현재 Java 8, 11, 17, 21이 있다.
오라클이 Java를 인후한 후 첫번째 LTS 출시로 대규모 릴리즈였다. 이후 모든 자바 버전의 기본으로 모든 기능이 우수하여 자바의 기본 지식으로 사용된다. 이후 버전들은 해당 버전에 추가 기능들이다.
32 비트를 지원하는 공식적인 마지막 버전
LocalDateTime과 같은 새로운 날짜, 시간 API 제공
Unsigned Integer 계산
람다식 제공
Stream API라는 Collection 타입에 대한 API 제공
Perm Gem 영역 삭제 Perm 영역은 클래스나 메서드의 메타 정보, static 변수와 상수 정보들이 저장되는 공간으로 메타데이터 저장 영역이라고도 한다. 이 영역은 Java 8부터 Native 영역으로 이동하여 Metaspace 영역으로 변경되었다. (다만, 기존 Perm 영역에 존재하던 Static Object는 Heap 영역으로 옮겨져 GC의 대상이 최대한 될 수 있도록 하였다.) 참고 https://johngrib.github.io/wiki/java8-why-permgen-removed/
Static Link JNI Libarary 제공
Java 11
변경사항이 많지 않아 Java 8에서 11로의 업그레이드는 적은 편으로 버전 11의 사용률 또한 높진 않다.
Open JDK와 Oracle JDK가 통합되고 Oracle JDK가 구독형 유료 모델로 전환
람다 지역 변수 사용 방법 변경 (var)
Third Party JDK로의 이전 필요
HTTP 클라이언트 표준화 기능 버전 11부터 도입된 Java HttpClient API는 최신 HTTP 표준의 클라이언트를 구현하며, 동기 및 비동기 프로그래밍 모델인 HTTP/1.1 및 HTTP/2를 지원한다. 버전 11 이전에는 기본적인 URLConnection 구현 또는 Apache HttpClient 등의 타사 라이브러리에 의존했어야 했다.
앱실론 가비지 컬렉터 (Epsilon GC)
문자열(String)과 파일(File)에 새로운 메서드 추가
Java 10부터 컴파일 없이 자바 소스 실행 가능
Java 17
가장 최근에 최근에서 두번째 나온 버전으로 (현재는 21 릴리즈됨) 21년 9월 출시되었다. 해당 버전 출시 이후 8버전 사용 비율이 상당히 줄 고 17 사용 비율이 높아졌다.
17버전으로 전환율이 높은 이유 중 하나는 바로 Spring Boot 3.0이다. Spring Boot 3.0은 Spring Framework 6을 기반으로 하여 최소 Java 17을 사용해야 한다고 명시되어 있다.
봉인 클래스(Seald class) 정식 추가 상속(extends)나 구현(implements)할 클래스를 지정해 두고 해당 클래스들만 상속, 구현을 허용하는 키워드 개발자는 seald 키워드를 통해 어떤 클래스가 해당 클래스를 상속, 구현하는지 알 수 있고 제한할 수 있다.
패턴 매칭 프리뷰 단계
ncubator (Foreign Function & Memory API) NI(Java Native Interface)를 대체하며 outside native function을 호출하고 JVM의 메모리에 액세스할 수 있다.
애플 M1 및 이후 프로세서 탑재 제품군에 대한 정식 지원
의사난수 생성기를 통해 예측하기 어려운 난수를 생성하는 API 추가
컨텐츠 기반의 역직렬화 필터링
Record Data Class 추가 불변 데이터를 객체간 전달하는 작업을 용이하게 만들어주는 클래스로 불필요한 코드를 제거하고 적은 코드로 명확하게 의도를 표현할 수 있다.
텍스트 블록 기능
Secrurity Manager 사용 중단
Java 21
가장 최근 출시된 LTS 버전으로 31년 9월까지 지원 예정
Spring Boot 3.2부터 지원
Java 플랫폼에 경량 가상 스레드를 도입 가상 스레드의 도입으로 몇 OS 스레드만 사용하여 수백만 개의 가상 스레드 실행 가능
댓글 영역