[JAVA] JVM을 이용한 자바 프로그램 실행

kjihye0340·2021년 5월 5일
0

java

목록 보기
2/9

JVM(Java Virtual Machine)

스택 기반의 자바 가상 머신
자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행하는 것
Garbage Collection 수행

자바 프로그램 실행 과정

  1. 자바 컴파일러 javac가 소스코드를 읽어들여 JVM이 이해할 수 있는 바이트코드(.class)로 변환한다.

  2. Class Loader를 통해 class 파일들을 JVM으로 로딩한다.

  3. 로딩된 class의 바이트코드를 Execution engine을 통해 바이너리 코드(기계어)로 해석한다.

    1. Interpreter : 바이트 코드를 명령어 단위로 한 줄 씩 읽어서 실행
    2. JIT(Just-In-Time) : 적절한 시점에 바이트코드 전체를 컴파일하여 네이티브 코드로 변경하여 이 이후에는 네이티브 코드 실행
      네이티브 코드는 캐시에 보관하기 때문에 빠르게 수행 가능
  4. 해석된 바이트코드는 Runtime Data Area에 배치되어 수행이 이루어진다.

Runtime Data Area

프로그램을 수행하기 위해 OS로부터 할당받는 메모리 영역


PC Register, Stack Area, Native Method Stack은 각 쓰레드마다 존재하며,
Method Area와 Heap Area는 모든 쓰레드에서 공유된다.

Method Area

Type 정보, Runtime Constance Pool, Field 정보, Method 정보, 클래스 변수 등
Class Loader가 읽은 클래스(혹은 인터페이스)의 메타데이터 정보가 저장된다.

Heap Area

new 키워드로 생성된 객체의 인스턴스와 배열이 생성되는 영역이다.
메소드 영역에 로드된 클래스만 생성이 가능하고 Garbage Collector가 참조되지 않는 메모리를 확인하고 제거하는 영역이다.

Stack Area

지역 변수, 파라미터, 리턴 값, 연산에 사용되는 임시 값들이 생성되는 영역이다.
Thread의 Method가 호출될 때 위 정보들이 Frame이라는 단위로 push된다.
Method 호출이 종료되면 stack에서 pop된다.

PC Register

현재 쓰레드가 실행되는 부분의 주소와 명령을 저장하고 있다.

Native Method Stack

Java외의 언어로 작성된 네이티브 코드들을 위한 stack이다.


출처
https://velog.io/@litien/JVM-%EA%B5%AC%EC%A1%B0
https://asfirstalways.tistory.com/158
https://jithub.tistory.com/40
https://sgcomputer.tistory.com/64

0개의 댓글