[Java] Java의 메모리 구조

유네스코d·2023년 6월 1일
0

Java

목록 보기
3/4

📌JVM

앞서 JVM에 대해 알아본 것처럼,
Java 프로그램이 실행되면 JVM(자바 가상 머신)이 OS로부터 메모리를 할당받고 이를 용도에 따라 여러 영역으로 나누어 관리한다.

프로그램 실행 과정

  1. JVM : OS로부터 이 프로그램이 필요로 하는 메모리를 할당받는다.
  2. 자바 컴파일러 : 자바 파일(.java)을 자바 바이트 코드(.class)로 변환한다.
  3. Class Loader : 바이트 코드를 런타임 데이터 영역에 배치하여 JVM의 메모리에 올리고, 실질적인 수행이 이루어진다.
  4. 실행과정에서 필요에 따라 GC와 같은 관리 작업을 수행한다.

이 중, JVM의 런타임 데이터 영역(Runtime Data Area)은 JVM의 메모리 영역으로, 자바 프로그램을 실행할 때 사용되는 데이터들을 적재하는 영역이다.
런타임 데이터 영역을 더 자세히 알아보자


📌런타임 데이터 영역(Runtime Data Area) - Java의 메모리 구조

JVM의 런타임 데이터 영역은 JVM이 프로그램을 수행하기 위해 OS로부터 할당받은 메모리 영역으로, 자바 프로그램 실행을 위한 데이터들을 적재한다.

자바의 메모리 공간은 크게 Method 영역, Heap 영역, Stack 영역으로 구분되고, 데이터 타입에 따라 할당된다.

1. 메소드 영역 (Method Area)

  • 전역변수와 static변수를 저장하며, Method영역은 프로그램의 시작부터 종료까지 메모리에 남아있다.

2. 힙 영역 (Heap)

  • new 키워드로 생성되는 객체(인스턴스), 배열 등과 같이 동적으로 생성된 데이터가 Heap 영역에 저장되며, 가비지 컬렉션에 의해 메모리가 관리된다.

3. 스택 영역 (Stack)

  • 지역변수와 매개변수 데이터 값이 저장되는 공간이며, 메소드가 호출될 때 메모리에 할당되고 종료되면 메모리가 해제된다.
  • LIFO(Last In First Out), 나중에 들어온 데이터가 먼저 나가는 구조를 가진다.
  • 변수에 새로운 데이터가 할당되면 이전 데이터는 지워진다.

4. PC 레지스터 (PC Register)

  • 현재 실행되는 부분의 주소와 명령을 저장한다.

5. 네이티브 메서드 스택 (Native Method Stack)

  • 자바 외 언어로 작성된 네이티브 코드를 위한 메모리 영역으로, 보통 C/C++등의 코드를 수행하기 위한 스택이다.

공유 범위

  • 모든 스레드가 공유해서 사용 (GC의 대상)
    • 힙 영역 (Heap Area)
    • 메서드 영역 (Method Area)

  • 스레드(Thread) 마다 하나씩 생성
    • 스택 영역 (Stack Area)
    • PC 레지스터 (PC Register)
    • 네이티브 메서드 스택 (Native Method Stack)

각 메모리 영역이 할당되는 시점

  1. Method 영역 : JVM이 동작해서 클래스가 로딩될 때 생성 (JVM이 실행되면서 생기는 공간)
  2. Stack 영역 : 컴파일 타임 시 할당
  3. Heap 영역 : 런타임시 할당
  • 컴파일 타임 : 소스 코드가 기계어로 변환되어 실행 가능한 프로그램이 되는 과정
  • 런타임 : 컴파일 타임 이후 프로그램이 실행되는 때



📝면접 대비

Q. Java의 메모리 구조에 대해 설명해주세요

A.

profile
yune's coding

0개의 댓글