상세 컨텐츠

본문 제목

JAVA 버전 8, 11, 17 차이 알아보기 (JDK, JRE, JVM과 버전 명명법)

JAVA/기본 & 강의복습

by ranlan 2024. 6. 22. 18:46

본문

728x90

자바로 뭘 한다고는 하지만 버전별 차이조차 모르는 현실.. 그냥 남들 다 쓰길래~ 가 아닌 내 상황에 맞는 버전을 선택할 수 있는 개발자가 되어보자

 

JDK Releases https://www.java.com/releases/ 

 

JDK Releases

The release information on this page covers the JDK releases that were widely distributed or significant to the development of Java. It does not cover patch releases or other one-off releases.

www.java.com

 

 

** JDK 1.8, JAVA 8, JAVA 1.8. 부르는 이름이 가지각색인 이유

초기 버전 표기법은 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가 된다. 

 

https://www.ggorantala.dev/differences-between-jdk-jre-and-jvm/

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이 있다.

 

 


 

자바 버전별 사용 현황

jetbrains 개발자 에코 시스템 22년 통계 https://www.jetbrains.com/ko-kr/lp/devecosystem-2022/java/

 

The State of Developer Ecosystem in 2022 Infographic

The State of Developer Ecosystem 2022 is a detailed report about the programming community, which covers the latest trends in languages, tools, technologies, and lifestyles of developers.

www.jetbrains.com

New Relic 에코 시스템 통계 https://newrelic.com/kr/resources/report/2023-state-of-the-java-ecosystem

 

2023년 Java 에코시스템 현황 보고서

애플리케이션에서 뉴렐릭으로 보고되는 데이터를 기반으로 가장 널리 사용되는 프로그래밍 언어 중 하나를 자세히 살펴봅니다.

newrelic.com

 


 

본격적으로 Java LTS 버전별 주요 차이점을 알아보자

 

Java 8

오라클이 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 제공
 

JDK 8에서 Perm 영역은 왜 삭제됐을까

 

johngrib.github.io

 

 

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을 사용해야 한다고 명시되어 있다.

 

https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Release-Notes

  • 봉인 클래스(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 스레드만 사용하여 수백만 개의 가상 스레드 실행 가능
  • UTF-8 기본값으로 사용

더 자세히 알아보기 https://openjdk.org/projects/jdk/21/

 

JDK 21

JDK 21 This release is the Reference Implementation of version 21 of the Java SE Platform, as specified by JSR 396 in the Java Community Process. JDK 21 reached General Availability on 19 September 2023. Production-ready binaries under the GPL are avai

openjdk.org

https://blogs.oracle.com/java/post/the-arrival-of-java-21

 

The Arrival of Java 21

placeholder

blogs.oracle.com

 

 


 

사람들이 여전히 Java 8 버전을 쓰는 이유

14년도에 출시된 버전이지만 무엇보다도 오라클의 지원 기간이 길다. 가장 안정적인 버전

오라클에서 JDK 8을 "현재까지 출시된 버전 중 가장 오랜 기간 지원될 버전" 이라 발표한 만큼 8 버전의 지원 기간이 17버전의 지원 기간보다 조금 더 긴 상태
Java 8은 30년 9월까지 지원 / Java 17은 29년 9월까지 지원

 

728x90

관련글 더보기

댓글 영역