[Java] JVM의 구조와 Java의 실행방식

dohyoungK·2024년 2월 27일
0

면접 스크립트

목록 보기
4/28

[Java] JVM의 구조와 Java의 실행방식


JVM의 구조

JVM은 자바 가상 머신의 약자로, 자바와 운영체제 사이에서 중개자 역할을 수행함으로써 자바가 운영체제에 의존적이지 않고 독립적으로 프로그램을 실행할 수 있도록 한다. 그리고 JVM은 Garbage Collector, Class Loader, Execution Engine, Runtime Data Area으로 이루어져 있다.

Garbage Collector

Garbage Collector는 힙 영역에서 더이상 사용되지 않는 객체들을 제거하고 메모리를 회수하는 역할

Class Loader

클래스 파일을 JVM 내의 Runtime Data Area에 로드하고 링크를 통해 배치하는 역할

Execution Engine

Class Loader를 통해 로드된 클래스 파일을 실행하는 역할

  1. 인터프리터 방식: 바이트 코드를 한 줄씩 실행한다.
  2. JIT 컴파일러 방식: 인터프리터 효율을 높이기 위한 컴파일러로 반복되는 코드를 이전에 실행한 기계어로 바꾸고 인터프리터가 바로 그 코드를 사용하는 방식이다.

Runtime Data Area

PC Register : Thread가 시작될 때 생성되며 현재 수행 중인 JVM의 명령어 주소를 가지고 있다.
Stack Area : 지역 변수, 파라미터 등이 생성되는 영역이며 실제 객체는 Heap에 할당되고 해당 레퍼런스만 Stack에 저장된다.
Heap Area : 동적으로 생성된 오브젝트와 배열이 저장되는 곳으로 GC의 대상 영역이다.
Method Area : 클래스 멤버 변수, 메소드 정보, Type 정보, Constant Pool, static, final 변수 등이 생성된다. 상수 풀(Constant Pool)은 모든 Symbolic Reference를 포함하고 있다.

Java의 실행 방식

  1. 자바로 개발된 프로그램을 실행하면 JVM은 OS로 부터 메모리를 할당한다.
  2. 자바 컴파일러(javac)가 자바 소스 코드(.java)를 자바 바이트 코드(.class)로 컴파일 한다.
  3. Class Loader를 통해 JVM Runtime Data Area로 로딩한다.
  4. Runtime Data Area 에 로딩된 .class 파일은 Execution Engine을 통해 실행한다.
  5. 실행 중인 프로그램에서 동적으로 생성되는 객체들은 Heap에 할당되며, Garbage Collector에 의해 메모리 관리가 이루어진다.

0개의 댓글