[Java] JDK와 JRE의 차이 그리고 JIT, JVM

커리어리라는 어플을 보다가 주니어 자바 개발자를 위한 100가지 질문을 보게 되었다.
8개월 동안 회사에서 프로젝트를 여러개 진행하면서 다양한 기술을 사용해봤다.
하지만 기초 및 이론 공부는 굉장히 소홀했었다..
기초가 단단하지 않으면 나의 개발 스펙트럼도 짧아 질것 같아서 하나하나 정리해보려 한다.
요즘 다시 괜찮아져서 블로그도 다시 시작… 화이팅..!

들어가기 앞서


  • 오늘은 자바 플랫폼에 대해 알아보고자 한다.
  • JDK, JRE, JVM은 자바 플랫폼의 3대 구성요소이다.
  • 오늘은 JDK, JRE, JVM에 추가로 JIT까지 알아보고자 한다.
  • 이미지를 먼저 확인 후 본격적으로 들어가보자..!
JDK와 JRE 그리고 JVM

JDK(Java Development Kit : 자바 개발 키트)


1. JDK는 무엇일까?

  • Java를 사용하기 위해 모든 기능을 갖춘 SDK(Software Development Kit)
  • JRE를 포함한 컴파일러(javac)와 jdb, javadoc 같은 도구를 포함
  • 즉, 프로그램을 생성하고 컴파일 할 수 있다.

2. JDK 종류

  • Java SE(Java Standard Edition)
    • 표준 에디션의 자바 플랫폼, 자바 언어의 핵심 기능 제공
    • 주요패키지 java.lang.*, java.io.*, java.util.*, java.awt.*, java.rmi.*, java.net.*
  • Java EE(Java Enterprise Edition)
    • Java SE에 웹 애플리케이션 서버에서 동작하는 기능을 추가한 플랫폼
    • 즉, 서버측 개발을 하기 위해 필요(JSP, Servlet, JDBC 등 기업용 애플리케이션 개발에 필요한 다양한 플랫폼)
    • 이 스펙에 따라 제품을 구현한 것이 WAS로 부름
  • Java ME(Java Micro Edition)
    • 임베디드 기기들에서 구동되기 위한 환경을 제공하는 API를 모아둔 플랫폼
    • 제한된 자원을 가진 휴대전화, PDA(소형 전자 기기) 등에서 Java 프로그래밍 언어를 지원하기 위해 만든 플랫폼

3. JDK 기본 도구

  • javac : 자바 컴파일러(자바 소스파일 => 바이트 코드)
  • java : javac가 만든 클래스 파일을 해석 및 실행
  • jdb : 자바 디버깅 툴

JRE(Java Runtime Environment : 자바 런타임 환경)


1. JRE는 무엇일까?

  • 자바로 만든 애플리케이션을 실행할 수 있는 런타임 환경 구축
  • JVM과 핵심 라이브러리 및 자바 런타임 환경에서 사용하는 프로퍼티 세팅이나 리소스 파일 제공
  • JDK와 달리 개발하는데 필요한 툴은 제공되지 않는다.
  • 클래스 로더, 클래스 라이브러리를 통해 작성한 코드를 라이브러리와 결합 후 JVM에 넘겨 실행
  • JRE는 특별한 기능을 수행하기 보단 JVM이 원할하게 잘 작동할 수 있도록 환경에 맞춰주는 역할

2. JRE 구성요소

  • JVM(Java Virtual Machine) : 자바 가상 머신으로 아래 따로 다루겠습니다.
  • Java Class Libraries : 개발하면서 자주 사용하는 여러 유용한 기능들을 모아놓은 클래스 집합 라이브러리
  • Java Class Loader : JVM이 동작하다가 클래스 파일을 참조하는 순간 동적으로 읽어 JVM에 링크되고 메모리에 로딩하는 역할

JVM(Java Virtual Machine : 자바 가상 머신)


1. JVM은 무엇일까?

  • 자바 프로그램이 어느 기기, 운영체제 상에서도 실행될 수 있도록 만듦(WORA : 한 번 쓰고 모든 곳에서 실행한다)
  • 메모리를 효율적으로 관리 및 최적화(Garbage Collection)
  • JVM은 단독으로 사용이 불가, 최소 배포 단위는 JRE이다.

2. 가비지 컬렉션(Garbage Collection)?

  • JVM이 메모리를 관리하는 프로세스
  • 사용하지 않는 메모리를 지속적으로 찾아 제거해 효육적인 메모리 관리
가비지 컬렉션

JIT(Just In Time Compilation) 방식


1. JIT는 무엇일까?

  • 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법

2. 컴파일 기법

  • 컴파일 기법에는 인터프리터 방식와 컴파일러 방식로 나뉨
  • 인터프리터 방식는 코드를 한 줄씩 중간 코드인 바이트 코드로 변환 후 실행
  • 컴파일링 방식는 코드 실행 전, 소스 코드를 한번에 기계어로 변환 후 실행
컴파일 기법

3. Java 컴파일 기법

  • 자바는 컴파일러 방식을 사용한다
  • Java Compiler를 통해 Byte Code로 변환되고 다시 기계어로 변환된다. 이 과정이 있기 때문에 느리다 평가가 존재한다.
  • 이러한 단점을 극복하기 위해 JIT 방식이 채택되었다.

4. JIT 방식

  • 자주 쓸만한 코드들을 기계어로 변환 시켜놓고 저장 후 이미 변환된 기계어 코드를 재사용하는 방식

포스트 작성 시 참고한 링크

comments powered by Disqus
Hugo로 만듦
JimmyStack 테마 사용 중