JAVA JVM메모리 구조, 컴파일 과정

다람·2023년 2월 22일
0

JAVA

목록 보기
7/27
post-thumbnail

JVM 메모리구조

  • 모든 자바 프로그램은 자바 가상 머신(JVM)을 통해 실행된다.
  • JVM은 운영 체제로부터 해당 프로그램을 수행할 수 있도록 필요한 메모리를 할당받는다.
  • JVM은 자바 바이트 코드를 실행할 수 있는 환경을 제공해준다.

  1. Class Loader (클래스로더)
  • 런타임 시에 클래스를 동적으로 JVM 내로 클래스 파일을 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈
  1. Execution Engine (실행 엔진)
  • 메모리(runtime data area)에 할당된 byte code를 실행하는 역할
  • byte code를 한 줄마다 읽으며 변환 작업
  1. Interpreter (인터프리터)
  • byte code 명령어를 하나씩 읽어 해석하고 실행하는 역할
  • 하나하나 실행은 빠르나 전체적인 실행 속도는 느리다.
  1. JIT Compiler
  • 자바 컴파일러가 생성한 byte code를 런타임에 바로 기계어로 변환하는데 사용
  1. Garbage Collector (가비지 컬렉터)
  • Heap 영역에 생성된 객체들 중 참조되지 않은 객체들을 탐색해 자동적으로 정리해주는 역할
  1. Runtime Data Area
  • JVM의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역

1) PC Register

  • 스레드가 시작될 때 생성되며 생성될 때마다 생성되는 공간으로 스레드마다 하나씩 존재한다.
  • 스레드 : 프로세스 안에서 실행되는 단위
  • 프로세스 : 실행 중인 프로그램

2) Stack Area

  • 메소드의 매개변수, 지역변수, return 주소, 임시변수 등의 정보를 기로하는 영역
  • 메소드 호출이 종료되면 스택에서 정보들이 제거된다.
  • 각 스레드 별로 생성되기 때문에 다른 스레드는 접근할 수 없다.

3) Native Method Stack

  • 자바 외의 언어로 작성된 네이티브 코드들을 위한 영역

4) Method Area

  • 모든 스레드가 공유하는 메모리 영역으로 클래스, 인터페이스, 메서드, 필드, Static 변수 등의 바이트 코드를 보관하는 영역

5) Heap Area

  • 모든 스레드가 공유하며 new 키워드로 생성된 객체와 배열이 생성되는 영역
  • Garbage Collector가 참조되지 않는 메모리를 확인하고 제거하는 영역

JAVA 컴파일 과정

  1. 개발자가 자바 소스 코드(.java)를 작성한다.
  2. 자바 컴파일러가 자바 소스코드(.java)파일을 읽어 바이트 코드(.class)로 컴파일한다.
  3. 컴파일된 바이트 코드(.class)를 JVM의 클래스로더에게 전달한다.
  4. 클래스로더는 동적 로딩을 통해 필요한 클래스들을 로딩 및 링크하여 런타임 데이터 영역 즉, JVM의 메모리에 올린다.
  5. 실행 엔진은 JVM 메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와 실행한다. 이 때 실행 엔진은 두가지 방식으로 변경한다.
    --> 인터프리터
    --> JIT 컴파일러
profile
안녕

0개의 댓글