본문 바로가기
to Developer/JAVA

JVM

by EH헌 2024. 1. 28.

JVM

  • 자바 가상머신으로 자바 바이트 코드를 실행할 수 있는 주체!
    • 컴파일러를 통해 바이트 코드로 변환된 파일을 JVM에 로딩하여 실행


JVM의 구조

  • Class Loader : JVM 내(Runtime Data Area)로 Class 파일을 로드하고 링크
  • Execution Engine : 메모리(Runtime Data Area)에 적재된 클래스들을 기계어로 변경해 실행
  • Garbage Collector : 힙 메모리에서 참조되지 않는 개체들 제거
  • Runtime Data Area : 자바 프로그램을 실행할 때, 데이터를 저장

JVM 실행 과정

  1. JVM은 OS로부터 메모리(Runtime Data Area)를 할당 받음
  2. 컴파일러(javac)가 소스코드(.java)를 읽어 바이트 코드(.class)로 변환
  3. Class Loader를 통해 Class파일을 JVM내 Runtime Data Area로 로딩
  4. 로딩된 Class 파일을 Execution Engine을 통해 해석 및 실행

JVM 메모리(Runtime Data Area) 구조

  • 메서드(static) 영역
    • 클래스가 사용되면 해당 클래스의 파일(.class)을 읽어들여, 클래스에 대한 정보(바이트 코드)를 메서드 영역에 저장
    • 클래스와 인터페이스, 메서드, 필드, static 변수, final 변수 등이 저장되는 영역입니다.
  • JVM 스택 영역
    • 스레드마다 존재하여 스레드가 시작할 때마다 할당
    • 지역변수, 매개변수, 연산 중 발생하는 임시 데이터 저장
    • 메서드 호출 시마다 개별적 스택 생성
  • JVM 힙 영역
    • 런타임 시 동적으로 할당하여 사용하는 영역
    • new 연산자로 생성된 객체와 배열 저장
    • 참조가 없는 객체는 GC(가비지 컬렉터)의 대상
  • PC register
    • 쓰레드가 현재 실행할 스택 프레임의 주소를 저장
  • Native Method Stack
    • C/C++ 등의 Low level 코드를 실행하는 스택

자료 참고
[참고 1] [참고 2

'to Developer > JAVA' 카테고리의 다른 글

Java 기초  (0) 2024.01.29
객체 지향 프로그래밍  (0) 2024.01.27
Java의 특징  (0) 2024.01.27