[JAVA] JVM(Java Virtual Machine) 정리하기

Carrot.___.·2024년 3월 6일
0

[사진 출처] 위키피디아

JVM이란?

자바 바이트코드를 실행할 수 있는 주체 (OS위에서 동작)

JVM을 두는 이유는 무엇일까? (=장점)

  • OS에 종속받지 않고, 바이트 코드를 실행할 수 있다. (-> 컴파일된 파일만 가지고, 다른 OS에서 실행 가능)

Java 실행 과정

  1. 프로그래머가 파일 작성 (*.java 파일 생성)
  2. 자바 컴파일러로 컴파일 (*.class 바이트 코드 파일 생성)
  3. JVM의 Class Loader가 동적으로 클래스를 읽어와 인터프리트 형식으로 코드 실행
  4. 어느 정도 자주 사용되는 기능은 JIT 컴파일러로 컴파일되고, 기계어로 직접 수행

구성 요소

  • ClassLoader

    Class 파일을 동적으로 로드하고, 링킹(Linking)하는 작업 담당
  • JVM Memory

    • Method Area : 클래스 멤버 변수의 이름, 데이터 타입, 필드 정보, 메서드 정보, 데이터 Type 정보, Constant Pool, static변수, final class 등이 생성되는 영역
    • Heap : 객체 및 배열이 생성되는 영역
    • Stack : 지역 변수, 파라미터 등 임시로 사용되는 변수들이 생성되는 영역
    • PC Registers : 스레드의 정보(실행되는 부분의 주소 및 명령)를 저장하고 있는 영역
    • Native Method Stack : 네이티브 코드를 실행할 때 사용되는 영역
  • Execution Engine

    • Method Area의 바이트 코드 실행을 담당
  • Garbage Collector

    • Heap 메모리 영역에 생성된 객체 중 unreacheable한 객체를 수집하고, 메모리 해제 담당
    • ex) Serial GC, Parallel GC, CMS GC, G1GC, ZGC...

GC(가비지 컬렉터)

GC는 Mark And Sweep 과정과 필요에 따른 Compact과정이 추가된다.

  1. Mark 과정 : Root space로 부터 순회하여, unreachable 객체와 reacheable 객체를 구분하여 마킹
  2. Sweep 과정 : Unreachable한 객체의 메모리 할당을 해제
  3. Compact 과정 : Heap 구조의 빈공간을 당겨서 압축시키는 과정

Minor GC : 비교적 가장 최근에 사용된 객체들의 메모리를 할당 해제 하는 것

Major GC : 오래 살아남은 객체의 메모리 할당을 해제하는 것

  • Young Generation (Eden, Survaival), Old Generation으로 나뉨

종류

  • Serial GC : GC를 처리하는 스레드가 1개, 1코어 CPU일때 사용
  • Parallel GC : Minor GC를 멀티 스레드로 수행
  • Parallel Old GC : Major GC도 멀티 스레드로 수행
  • CMS GC : GC 파악을 여러 과정으로 나뉘어서 실행
  • G1 GC : Region 개념을 부여, 고정된 영역, 영역별로 GC 실행
  • ZGC : Region이 가변적임

0개의 댓글