Java Virtual Machine (2)

안재민·2024년 8월 28일

JAVA

목록 보기
2/6

JVM 구조

  • Method, Heap Area는 모든 Thread 공유
  • Register, Natice Method Stack은 각 Tread 개별 영역

📒 Method Area

JVM이 시작될 때 생성되는 공간, 바이트 코드를 처음 메모리 공간에 올릴 때 초기화 되는 대상을 저장

📒 Heap Area

런타임시 동적으로 할당하여 사용하는 영역

new 연산자로 생성되는 클래스, 인스턴스 변수, 배열
-> Regerence Type이 저장되는 곳

힙 공간은 가비지 컬렉션의 대상이 되는 공간이므로 내부가 세부적으로 5가지로 나뉜다.

  • Young Generation : 생명 주기 짧은 객체 GC 대상
  • Old Generation : Young Generation에서 살아남은 객체가 이동

📒 Stack Area

임시적으로 사용되는 변수나 정보들이 저장되는 영역

📒 PC Registers

현재 수행중인 JVM 명령어 주소를 저장하는 공간

📒 Native Method Stack

기계어로 작성된 프로그램을 실행 시키는 영역
일반적으로 실행하는 경우 : Stack에 쌓임
네이티브 방식(JIT 컴파일러) : Native Method에 쌓임

Garbage Collection

❓Garbage 란?

Garbage : 정리되지 않는 메모리, 유효하지 않는 메모리 주소(ex) 참조하는 레퍼런스가 하나도 없는 객체나 배열)
=> 주소를 잃어버린 메모리, 앞으로 사용하지 않고 메모리를 가지고 있는 객체

❓Garbage Collector 이란?

Java는 Garbage Collector가 메모리 관리를 대신 해주기 때문에 메모리 관리, 메모리 누수 문제에 대해 관리를 하지 않아도 됨

Garbage Collector는 메모리가 부족할 때 Garbage들을 메모리를 해제시켜 메모리를 사용할 수 있도록 해줌

Heap 메모리 영역에 생성 된 객체들 중 Garbage를 찾아 내어 메모리 회수

❓ Garbage Collector의 단점은?

  1. 메모리가 언제 해제 되는지 정확하게 알 수 없음
  2. GC가 동작하는 동안 다른 동작을 멈춤(Stop-The-World)

❓ Stop-The-World란?

GC를 수행하기 위해 JVM이 프로그램 실행을 멈추는 현상
GC 관련 Thread를 제외한 모든 Thread는 멈추게 됨

0개의 댓글