본문 바로가기

카테고리 없음

[Java_001]JDK와 JRE, 그리고 JVM의 메모리구조

오늘은 오랜만에 자바를 설치하였다.

그런데 JDK와 JRE의 차이점이 무엇인지 잘 신경쓰지 않아 왔다.

 

miro.medium.com/max/636/1*8oNn6HxcWFmrCsgUt27k0w.jpeg

JDK와 JRE의 차이점을 잘 나타내는 구조도이다.

 

- JDK: Java Development Kit = JRE + 개발에 필요한 실행파일(javac.exe, debugger 등)

- JRE: Java Runtime Enviroment = JVM + 클래스 라이브러리(Java API)

- JVM: Java Virtual Machine = 자바를 실행하기 위한 가상 기계(가상 컴퓨터)

 

이제 JVM의 메모리 구조는 어떻게 되어 있을 지 알아보자.

 

hongsii.github.io/images/jvm-memory-structure.jpg

JVM의 메모리는 크게 쓰레드 별로 생성되는 데이터 영역과 전체 쓰레드가 공유하는 데이터 영역으로 나뉜다.

 

1. Method Area

프로그램 실행 중 어떤 클래스가 사용되면, JVM은 해당 클래스의 클래스파일(*.class)을 읽어서 분석하여 클래스에 대한 정보(클래스 데이터)를 이곳에 저장한다. 이 때, 그 클래스의 클래스변수도 이 영역에 함께 생서된다.

 

2. Heap

인스턴스가 생성되는 공간. 프로그램 실행 중 생성되는 인스턴스는 모두 이곳에 생성된다. 즉, 인스턴스 변수들이 생성되는 공간이다.

 

* Method Area, Heap는 전체 쓰레드가 공유하는 영역이다.

 

3. Call Stack(Execution Stack)

호출스택은 메서드의 작업에 필요한 메모리 공간을 제공한다. 메서드가 호출되면, 호출 스택에 호출된 메서드를 위한 메모리가 할당되며, 이 메모리는 메서드가 작업을 수행하는 동안 지역변수(매개변수 포함)들과 연산의 중간결과 등을 저장하는데 사용된다. 그리고 메서드가 작업을 마치면 할당되었던 메모리 공간은 반환되어 비워진다.

 

가장 기초가 되는 내용일 수록 잘 숙지해 놓아야 한다.