처누

[Java] JVM, 메모리 영역(method, stack, heap), static 본문

java

[Java] JVM, 메모리 영역(method, stack, heap), static

처누 2024. 7. 22. 23:16

JVM이란

 - Java Virtual Machine의 약자이며 자바 가상 머신이라고도 불린다.

 - java의 바이트 코드를 해석하고 실행한다.

 - OS에 종속받지 않고 실행할 수 있다. (JVM 설치만 하면 어디서든 java 파일을 실행할 수 있다는 뜻)

 

JVM의 컴파일 과정

 - .java 파일을 컴파일러가 .class 파일로 변환(이 과정에서 바이트 코드가 생성)

 - .class 파일을 JVM의 ClassLoader에게 보낸다.

 - ClassLoader에서 JVM Running Data Area로 로딩(할당)하여 메모리에 올린다.

- Execution Engine
Class Loader에 의해 메모리에 적재된 클래스(바이트 코드)들을 기계어로 변경해 명령어 단위로 실행하는 역할.
명령어를 하나씩 실행하는 인터프리터(Interpreter)방식이 있고 JIT(Just-In-Time) 컴파일러를 이용하는 방식이 있다.
JIT 컴파일러는 적절한 시간에 전체 바이트 코드를 네이티브 코드로 변경해서 Execution Engine이 네이티브 컴파일된 코드를 실행하는 것으로 성능을 높이는 방식이다.

- Garbage Collector(GC)
Heap 메모리 영역에 생성(적재)된 객체들 중에 참조되지 않은 객체들을 탐색 후 제거하는 역할
GC가 역할을 하는 시간은 정확히 언제인지 알 수 없다.
GC가 수행되는 동안 GC를 수행하는 쓰레드가 아닌 다른 모든 쓰레드가 일시정지된다.

 

Runtime Data Area

Runtime Data Area는 JVM의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역이다.

 

 

Method Area

  •  프로그램을 실행하는데 필요한 공통 데이터를 관리하고, 이 영역은 프로그램의 모든 영역(스레드)에서 공유한다.
  •  클래스 정보(메서드, 생성자), static 변수, 공통 리터럴 상수 등을 저장한다.
  •  JVM이 종료 시 메모리에서 해제된다.(프로그램이 종료되기 전까지 메모리 상에 존재함.)

 

Heap Area

  •  new 키워드로 생성된 객체와 배열이 저장되는 공간.
  •  참조형 데이터 타입이 저장됨.
  •  Garbage Collector가 이루어지는 영역이며 더 이상 참조되지 않는 객체는 GC에 의해 제거된다.

 

Stack Area

  •  원시형 데이터 타입이 저장됨.
  •  자바 실행 시, 하나의 실행 스택이 생성된다.
  •  각 스택 프레임은 지역 변수, 중간 연상 결과, 메서드 호출 정보 등을 포함한다.
  •  메서드를 호출할 때 마다 하나의 스택 프레임이 쌓이고, 메서드가 종료되면 해당 스택 프레임이 제거된다.
  •  Heap 영역에 생성된 데이터의 참조값이 할당됨. 즉, new 키워드로 인스턴스를 생성할 때, Heap 영역에는 생성된 객체가 저장되고, Stack 영역에는 생성된 객체에 대한 주소값(Reference)가 저장된다.
  •  각 스레드별로 하나의 스택이 생성된다. 따라서 스레드 수 만큼 스택 영역이 생성된다.(1:1)

 

PC(Program Counter) Register

  •  각 스레드마다 하나씩 존재하며, 현재 실행 중인 JVM 명령의 주소를 저장한다.
  •  스레드가 컨텍스트 스위칭을 할 때, PC 레지스터의 값이 변경된다.
컨텍스트 스위칭(Context Switching)이란?
여러개의 프로세스가 실행되고 있을 때 기존에 실행되던 프로세스를 중단하고 다른 프로세스를 실행하는 것. 즉, CPU에 실행할 프로세스를 교체하는 기

 

Native Method Stack

  •  자바 외의 언어로 작성된 네이티브 메서드를 호출할 때 사용되는 스택.
  •  C, C++ 등 네이티브 코드를 실행할 때 필요한 메모리를 저장한다.
  •  각 스레드마다 하나씩 존재한다.

참고

https://jeong-pro.tistory.com/148