Post

[JSCode 자바 스터디] 5주차(1) - JVM

📌 JVM

JVM 구조

  • JVM이란 Java Virtual Machine, 자바 가상 머신의 약자를 따서 줄여 부르는 용어이다.
  • Java와 OS(운영체제) 사이에서 중개자 역할을 수행하여 OS(운영체제)에 구애받지 않고 독립적으로 작동이 가능하게 한다.
  • 메모리 관리, Gc(가비지 컬렉션)을 수행한다.
    alt text

👉 클래스 로더

런타임 중에 JVM의 메소드 영역에 동적으로 Java 클래스를 로드하는 역할을 합니다.

  • JVM내로 .class에서 Byte Code를 읽고 메모리에 저장한다.
  • 해당 Class Type의 Class 객체를 생성하여 힙 영역에 저장한다.(힙 영역은 모든 쓰레드에 공유)
  • 클래스 로딩 : .class 파일을 읽어서 클래스 정보를 저장
  • 클래스 링크 : 검증,

👉 Execute Engine

  • . class파일과 같은 ByteCode를 실행 가능하도록 해석한다.

👉 JVM 메모리 영역

Method Area(메서드 영역)

  • 클래스 정보를 처음 메모리 공간에 올릴 때 초기화되는 대상을 저장하기 위한 메모리 공간이다. 이 공간에는 Runtime Constant Pool도 존재하며, 상수 자료형을 저장하고 참조하는 역할을 한다.

Heap(힙)

alt text

  • 객체를 저장하는 가상 메모리 공간이다. new 연산자로 생성된 객체과 배열을 저장한다.
  • 모든 스레드가 힙 영역을 공유한다.
  • JVM의 GC(Garbage Collector)가 이 영역을 관리한다.
  • Young/Old Generation:

    Eden : 객체들이 최초로 생성되는 공간 Survivor 0/1 : Eden에서 참조되는 객체들이 저장되는 공간

  • Old 영역 : Eden 영역에 객체가 꽉 차면 첫 번째 GC가 발생한다. Eden 영역에 있는 값들을 Survivor 1영역에 복사하고, 이 영역을 제외한 나머지 영역의 객체를 삭제한다.

Stack(스택)

  • 프로그램 실행과정에서 임시로 할당되었다가 메소드를 빠져나가면 바로 소멸되는 특성의 데이터를 저장하기 위한 영역이다.

PC Register

  • Thread가 시작될 때 생성되며 스레드마다 하나씩 존재한다.
  • 현재 수행 중인 JVM 명령의 주소를 갖는다.

참고

  • https://backendcode.tistory.com/161
  • https://asfirstalways.tistory.com/158
This post is licensed under CC BY 4.0 by the author.