[JAVA] JVM

김상인·2022년 8월 31일
0

자바

목록 보기
1/3
post-thumbnail

JVM

JVM(Java Virtual Machine)은 자바 가상 머신이다.

추상 컴퓨팅 머신으로 실제 컴퓨팅 머신처럼 명령 집합을 가지고 있으며 런타임에 다양한 메모리 영역을 조작한다. 또한 자바 프로그래밍 언어에 대해 아는 것이 없으며 오직 특정 이진 형식인 클래스 파일 형식만 알고 있어서 운영체제와 자바 프로그램 사이에 JVM이 중재자 역할을 하여 운영체제 상관없이 자바 프로그램을 실행할 수 있다.

하지만 JVM은 운영체제마다 다르기 때문에 운영체제에 맞는 JVM을 설치한다.

자바 프로그램 실행 과정

  • 자바로 작성한 코드는 ".java"라는 확장자를 가지며 자바에 존재하는 javac라는 전용컴파일러가 ".java"로 끝나는 자바코드를 컴퓨터가 이해할 수 있도록 프로그래밍 언어를 기계어로 변경하게 되면 ".class"라는 확장자를 가진 파일이 생성된다.
  • Class Loader를 통해 RunTime Data Area에 ".class" 파일들을 로딩한다.
  • Runtime Data Area에 로딩된 ".class" 파일들은 Execution engine을 통해 실행된다.

Runtime Data Area

클래스 로딩시 클래스 정보를 저장하는 메모리 공간

  • Method
    메소드 영역은 모든 스레드가 공유하는 영역으로 JVM이 시작될 때 생성된다. 클래스와 인터페이스, 필드와 메서드 정보, Static 변수 등을 저장한다.
  • Heap
    생성된 객체들에 대한 정보가 저장된다.
  • Stack
    스레드마다 메소드가 수행될 때마다 스택 프레임을 만들어 해당 메소드에 대한 정보를 저장한다. 메소드가 종료되면 스택 프레임이 제거된다.
  • PC register
    스레드마다 실행할 메소드의 스택 프레임의 주소값이 저장된다.
  • Native Method Stack
    자바 외의 언어로 작성된 네이티브 코드를 위한 스택이다. 즉 JNI(Java Native Interface)를 통해 호출하는 C/C++ 등의 코드를 수행하기 위한 스택으로 언어에 맞게 스택이 생성된다.

참조
https://docs.oracle.com/javase/specs/jvms/se15/html/jvms-1.html#jvms-1.2
https://d2.naver.com/helloworld/1230

profile
백엔드 희망자

0개의 댓글

관련 채용 정보