JVM

이상혁·2024년 1월 21일
0

JVM

jvm은 한 마디로 가상머신이다.
자바로 개발한 프로그램을 컴파일하여 만든 바이트 코드를 해석해서 실행하기 위한 가상 머신이다.

이전에 C언어에서는 각각에 OS에 맞게 설정을 다 따로 해주어야 했다.
자바는 이 jvm을 통해서 다른 설정없이 하나의 프로젝트로 OS에서 다 돌아게 만들어 준다.

JVM의 구조

jvm은 크게 3개로 나눌 수 있다.
먼저, class loader system, runtime data areas, execution engine이다.

class loader system

class loader system은 소스 파일을 컴파일해서 바이트 코드로 만든 class 파일을 jvm으로 불러오는 역할을 한다.

class loader는 총 3 단계로 나누어진다.

  1. 로딩
  • .class 자바 바이트 코드를 메소드 영역에 저장한다.
  • 메소드 영역에 바이트 코드의 정보들을 저장한다. (클래스, 변수, 메서드 등등)
  1. 링크
  • 로드된 클래스 파일들을 검증하고, 사용할 수 있게 준비하는 과정
  1. 초기화
  • 클래스 변수들을 적절한 값으로 초기화 한다.

Execution engine

바이트 코드를 해석하고 실행하는 역할을 한다.
execution engine은 3가지로 구성이 되어 있다.

  1. 인터 프리터
    한마디로 변역을 해주는 역할을 한다.
    class 파일에 바이트 코드를 컴퓨터가 읽을 수 있도록 해석을 해서 바이트 코드를 실행을 시킨다.

  2. JIT
    자주 사용이 되는 명령어나 기계어를 저장해 두었더가 사용이 될 때 빠르게 사용할 수 있도록 해준다.

  3. 가비지 콜렉터
    더 이상 사용이 되지 않는 인스턴스를 찾아서 지우고 메모리 낭비를 지워준다.

Runtime Data Area

jvm에서 데이터들을 저장하기 위해서 사용이 되는 메모리 영역이다.
Methoed Area, Heap, Pc Resiter, Stack, Navite Method Stack으로 구성이 되어져 있다.

Method Area 같은 경우, class 변수나 메소드들 같은 클래스 정보들이 저장이 된다.
그리고 바이티 코드와 Constant Pool에 상수들도 여기에 저장이 된다.

이 바이트 코드가 Execution에 의해서 바이트 코드가 실행이 될 때, class의 인스턴스들이 Heap 영역에 저장이 된다.
또한 배열도 Heap 영역에 저장이 된다.

Pc Resiter에 경우 CPU를 사용하다가 보면 동시성에 의해서 다른 작업으로 넘어갈 수 있다.
이 때, 넘어가지전에 현재 작업을 어디까지 했는지에 대한 정보를 저장해야 하는데 그 정보를 저장하는 곳이 바로 Pc Register이다.

Stack은 메소드가 실행이 되면 그 메소드의 정보가 Frame으로 담겨지는 곳이다.

Native Method Stack은 Execution Engine에 의해서 많이 사용하는 명령어나 단어를 저장하는 곳이다.

profile
개발 공부 하기 위해 만든 블로그

0개의 댓글