Java 프로그램의 실행과 JVM

shinhyocheol·2021년 11월 11일
0

자바 프로그램 실행 과정

자바로 작성된 소스파일을 자바 바이트 코드(클래스) 코드로 변환하여 생성한다. 이 생성한 파일을 JVM이 읽고 실행하게 된다.

JVM

자바 가상머신이라고 불리며 자바 바이트 코드를 실행할 수 있는 주체로 JVM으로 인해 CPU나 운영체제와 독립적으로 동작이 가능하다.

Class Loader

  • 자바 컴퍼일러가 자바 파일을 컴파일하면 클래스 파일이 생성된다. 이렇게 생성된 파일을 엮어 Runtime Data Area 형태로 메모리에 적재하는 역할을 한다.

Execution Engine

  • 메모리에 적재된 클래스들을 기계어로 변경해 명령어 단위로 실행하는 역할을 한다. 명령어를 하나하나 실행하는 인터프리티 방식과 실행 시점에 자주 쓸만한 코드들을 기계어로 변환시켜놓고 저장해서 사용하는 JIT 방식이 있다.

Gargage Collector

  • Runtime Data Area의 힙 영역에 생성된 객체들중 참조되지(사용되지)않는 객체를 찾아 수집하고 메모리를 해제하는 역할을 한다.

Runtime Data Area

  • Method Area
    • 클래스 멤버 변수, 메소드 정보, 타입 정보, static, final 변수등이 생성된다.
  • Heap Area
    • 동적으로 생성된 오브젝트와 배열이 저장되며, 가비지 컬렉터의 대상이 되는 영역이다.
  • Stack Area
    • 지역변수, 파라미터 등이 생성되는 영역이며, 동적으로 객체를 생성하면 실제 객체는 Heap에 저장되고, 해당 래퍼런스만 Stack에 저장된다. 스레드별로 해당영역을 가진다.
    • Stack에서 참조할 수 없는 Heap의 객체는 가비지컬렉터의 수집대상이된다.
  • PC Register
    • 현재 스레드가 실행되는 부분의 주소와 명령을 저장하고 있다.
  • Native Method Stack
    • 자바외 언어로 작성된 네이티브 코드를 위한 메모리 영역
profile
놀고싶다

0개의 댓글