[Java] JVM

Chloe Choi·2021년 4월 11일
0

Java

목록 보기
4/5

JVM

Java Virtual Machine, 자바 바이트코드를 실행할 수 있는 주체

*자바 바이트코드 = Java Source File을 자바컴파일러가 컴파일 시 생성

JVM makes Java platform independent


ref. https://medium.com/@neil.wilston123/why-java-is-platform-independent-1d82c2249a69

같은 자바 프로그램은 어느 플랫폼에서 생성되든 같은 바이트코드를 갖는다. 따라서, 어느 플랫폼에서 생성되었는지와 무관하게 어느 플랫폼의 JVM에서든 동일하게 동작한다.(모든 자바 프로그램은 CPU나 운영체제의 종류와 무관하게 동작을 보장)

따라서 자바는 플랫폼에 독립적이라는 특징을 갖는다!

JVM 구성

  • Class Loader
    : 런타임 시 동적으로 클래스를 JVM으로 로드하고 런타임 데이터 영역에 바이트 코드를 배치(@Method area)
  • Excution Engine
    : 클래스 로더가 배치한 클래스를 실행시키는 역할(바이트코드를 해석해 기계어를 생성)
  • Garbage Collector
    : GC를 수행하는 모듈
  • Runtime Data Area
    : 프로그램 실행 시 OS로부터 할당받는 메모리
    자세한 내용은 이 글을 확인해주세요

자바 프로그램 실행과정


① 프로그램이 실행되면 JVM은 OS로부터 필요한 메모리를 할당받음
② javac가 자바 소스코드(.java)를 자바 바이트코드(.class)로 변환
③ Class Loader를 통해 class 파일들을 JVM으로 로딩(@Method area)
④ 로딩된 class 파일들을 Excution Engine을 통해 해석(기계어 생성)
⑤ 해석된 바이트코드(기계어)를 Runtime Data Area에 배치해 실질적인 수행이 이루어짐

과정 중 코드의 변환과정만 보면 다음과 같다

profile
똑딱똑딱

0개의 댓글