시냅스

자바 가상 머신, JVM이란 본문

Java, Spring

자바 가상 머신, JVM이란

ted k 2022. 7. 11. 22:35

자바 가상 머신, JVM이란

https://www.nowwatersblog.com/cs/JVM

  • 운영체제에 독립적으로 실행하게 하는 버츄얼 머신
  • 자바는 컴파일 과정에서 OS와 소통하는 기계어로 컴파일 되지 않고 JVM이 이해할 수 있는 Java bytecode(.class) 로 변환된다.
  • JVM이 이 bytecode를 OS가 이해할 수 있게 해석한다.

 

자바 바이트 코드, Java Bytecode

  • 바이트 코드란 가상 컴퓨터(VM)에서 돌아가는 실행 프로그램을 위한 이진 표현법을 의미한다.
  • 자바 바이트 코드(Java bytecode)는 JVM이 이해할 수 있는 언어로 변환된 자바 소스코드를 의미한다.
  • 변경된 자바 바이트 코드(.class) 파일들을 클래스 로더를 통해 JVM 메모리 영역으로 로딩한다.
  • 이 바이트 코드는 다시 인터프리터 또는 JIT 컴파일러에 의해 바이너리 코드로 해석된다.
    • JIT(just-in-time compliation)는 바이트 코드 전체를 컴파일하여 바이너리 코드로 변경하고, 바이너리 코드를 직접 실행하는 방식이다.
    • 하나씩 인터프리팅하여 실행하는 것이 아니라 바이트 코드 전체가 컴파일된 바이너리 코드를 실행하는 것이기 때문에 인터프리팅 방식보다 빠르다.
    • 기계어(컴파일된 코드)는 캐시에 보관하기 때문에 한 번 컴파일된 코드는 빠르게 수행하게 된다.
    • 한 번만 실행되는 경우라면 인터프리팅이 훨씬 빠를 수 있다.

 

클래스 로더, Class Loader

  • JVM 위에 자바 바이트 코드(.class)를 로딩한다.
  • 또한 링크를 통해 배치하는 작업을 수행한다.
  • 로더와 링커의 기능을 동시에 수행하는 모듈이다.

 

실행 엔진, Excution Engine

  • 메모리에 적재된 바이트 코드(.class)를 기계어로 변경, 명령어 단위로 실행
  • 바이트 코드를 운영체제에 맞게 해석한다.

 

Runtime Data Area

https://www.nowwatersblog.com/cs/JVM

  • 힙 영역
    • 런타임에 동적으로 할당되는 데이터가 저장되는 영역. 객체나 배열 생성이 여기에 해당
  • 스택 영역
    • 지역변수, 매개변수, 메소드 정보, 임시 데이터 등을 저장
  • 메서드 영역
    • JVM이 시작될 때 생성되고, JVM이 읽은 각각의 클래스와 인터페이스에 대한 런타임 상수 풀, 필드 및 메서드 코드, 정적 변수, 메서드의 바이트 코드 등을 보관함
    • 런타임 상수 풀을 상수 자료형을 저장하기 위해 따로 존재하는 공간이다.
  • PC 레지스터
    • 스레드가 어떤 명령어로 실행되어야 할지 기록하는 부분(JVM 명령의 주소를 가짐)
  • 네이티브 메서드 스택
    • 실제 실행할 수 있는 기계어로 작성된 프로그램을 실행시키는 영역
Comments