엉차엉차

[JAVA] JDK, JRE, JVM란? (JVM의 메모리 구조🐾) 본문

엉금엉금 [이론]/01_JAVA

[JAVA] JDK, JRE, JVM란? (JVM의 메모리 구조🐾)

b_nyong 2023. 10. 28. 01:49

JDK (Java Development Kit, 자바 개발 도구)

- JRE (Java Runtime Environment, 자바 실행 환경)

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

 

[ 00_ 용어 살펴보기 ]

01. 컴파일(compile) : 특정 프로그래밍 언어로 작성된 코드 전체를 다른 언어로 번역해주는 과정

02. 컴파일러(compiler) : 컴파일을 자동으로 수행해주는 소프트웨어

03. 디버그(Debug) 또는 디버깅(Debugging) : 프로그래밍 과정중에 발생하는 오류나 비정상적인 연산, 즉 버그를 찾고 수정하는 것

04. JAR(Java ARchive Files) : 자바 압축 파일웹브라우저에서 빠르게 다운로드할 수 있도록 자바 애플릿(자바로 작성된 소프트웨어)을 위한 클래스, 이미지 및 사운드 파일들을 하나의 파일에 압축하여 담고 있는 파일

05. 라이브러리(Library) : 미리 작성된 코드 조각들의 모음, 프로그램 개발 시 재사용할 수 있는 기능들을 제공

06. 자바 바이트 코드(java byte code) : 자바 가상 머신이 이해할 수 있는 언어, 변환된 자바 소스 코드

07. 가비지 콜렉터(Garbage Collector) : 메모리 관리 기법 중 하나, Heap 영역에 배치된 객체들을 관리하는 모듈 (동작시점은 알 수 없다)

 

[ 01_ JDK, JRE, JVM의 구조 ]

이 모든 요소들을 각각의 용도에 따라 활용하여 자바 프로그램을 개발, 테스트, 실행하기에

자바로 코딩을 할 컴퓨터, 서버를 돌릴 컴퓨터에 JDK를 설치해야하는 이유이다.

 

[ 02_ JDK ]

JDK는  Java 환경에서 돌아가는 프로그램을 개발하는 데 필요한 툴들을 모아놓은 소프트웨어 패키지이다.

 

Java란 언어와 그 표준은 오라클(Oracle)에서 관리하지만, Java로 소프트웨어를 개발하고 실행하는 JDK는 여러 곳에서 만들어지고 배포된다.

- 왜느냐면 JDK는 결국 소프트웨어이기 떄문!

- 그렇기에 Oracle 뿐만 아니라 다양한 회사들에서도 JDK를 만들고 배포한다.

- Oracle에서 출시하는 JDK에는 상업적으로 사용이 가능한 OracleJDK(유료), 무료 오픈소스 버전인 OpenJDK(무료)가 있다.

- OpenJDK의 경우, 개인 또는 소규모 기업에서 사용하기에는 충분한 안정성이 있기에 수업과 프로젝트에서 사용을 하였다.

- LTS 버전? 오래 쓰기 위해 만들어진 버전, 업데이트나 보안 수정이 장기간 제공되기 떄문에 실무에서 개발할 떄 안정적인 LTS버전 사용

 

[ 03_ JRE ]

JRE란? Java Runtime Environment, 자바 실행 환경으로

- JVM과 자바 프로그램을 실행시킬 때, 필요한 라이브러리 API를 함께 묶어 배포하는 패키지이지만

- 요즘은 JRE와 JDK의 구분이 모호해졌다고 한다.

 

[ 04_ JVM ]

JVM은? Java Virtual Machine, 자바 가상 머신으로

- 자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행하며,

- 메모리 관리인 Garbage collection(가비지 컬렉션)을 수행한다. ★

 

[ 04_1_ JVM의 필요성 ]

1. 한정된 메모리를 효율적으로 사용하여 최고의 성능을 도출한다.

2. 메모리 효율성을 위해 메모리 구조를 이해해야 한다.

 

[ 04_2_ JVM의 메모리 구조 ]

 

[ 04_3_ JVM의 실행 과정 ]

1. 프로그램이 실행되면 JVM은 OS로부터 프로그램이 필요로하는 메모리를 할당 받는다.

2. Java compiler(javac)가 자바 소스코드(.java)를 읽어 자바 바이트 코드(.class)로 변환 시킨다.

3. Class Loader를 통해 자바 바이트 코드(.class)를 읽어온 뒤, JVM으로 로딩한다.

4. 로딩된 파일들은 Execution Enginer를 통해 해석되며, Runtime Data Areas에 배치되어 실질적 수행을 이루게 된다.

이러한 실행과정 속에서 JVM은 필요에 따라 스레드 동기화(Thread Synchronization)와 가비지 컬렉션(GC) 같은 관리작업을 수행한다.