JVM

초콜렛빵·2022년 5월 22일
0

TIL

목록 보기
13/27

JVM

JVM이란?

  • Java Virtual Machine의 줄임말
  • Java가 OS에 종속되지 않고 실행되기 위한요소
  • Java complier를 통해 .java 파일을 Java bytecode인 .class로 변환시킴
  • 변환된 bytecode 역시 기계어가 아니기 때문에 JVM을 통해 OS가 실행시킬 수 있도록 도움

컴파일 방법

  • Java Compiler의 경우 JDK 설치시 javac.exe 라는 실행 파일 형태로 설치
  • javac 명령어를 활용해 .class 파일 생성

바이트코드(bytecode)란?

  • VM에서 사용되는 실행 프로그램을 위한 이진 표현법
  • Java bytecode는 JVM에서 사용될 수 있도록 변환된 자바 소스코드를 의미
  • 이 바이트코드는 실시간 번역기 또는 JIT 컴파일러를 통해 다시 바이너리 코드로 변환되어 CPU에서 사용

JIT 컴파일러란

  • JIT 컴파일(Just-In-Time compliation) 또는 동적 번역(dynamic translation)으로 불림
  • 프로그램 실제 실행하는 시점에서 기계어로 번역하는 컴파일러를 지칭
  • 인터프리터의 단점을 보완하기 위해 도입
  • 기계어로 변환된 코드는 캐시에 보관되어 빠르게 수행이 가능하며, 컴파일보다 인터프리팅이 빠르므로 한번 실행되는 모드는 인터프리팅이 유리
  • 이를 기준으로 메서드가 자주 수행되는 내용을 컴파일 수행

JVM 구성요소

JVM 구성요소

  • 구성요소
    • 클래스 로더(Class Loader)
    • 실행 엔진(Execution Engine)
      • 인터프리터(Interperter)
      • JIT 컴파일러(Just-In-Time)
      • 가비지 콜렉터(Garbage collector)
    • 런타임 데이터 영역(Runtime Data Area)

클래스 로더(Class Loader)

  • JVM 내로 클래스 파일(.class)을 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈
  • 런타임시 동적으로 클래스를 로드하고 jar 파일 내 저장된 클래스들을 JVM위에 탑재
  • 클래서 처음 참조 시, 해당 클래스를 로드하고 링크하는 역할

실행 엔진(Execution Engine)

  • 클래스를 실행시키는 역할
  • 클래스 로더가 배치시킨 바이트코드를 실제로 기계가 실행할 수 있는 형태로 변경
  • 종류
    1. 인터프리터: 명령어 단위로 읽어서 실행하며 한 줄씩 수행하기 때문에 느린 단점
    2. JIT(Just-In-Time): 인터프리터 방식으로 실행하다 적절한 시점에 전체를 컴파일하여 기계어로 변경 후 인터프리팅을 더이상 하지 않음
    3. 가비지 콜렉터: 더이상 사용되지 않는 인스턴스를 찾아 메모리에서 삭제

런타임 데이터 영역(Runtime Data Area)

Runtime Data Area

  • 프로그램 수행을 위해 할당받은 메모리 공간
  • 종류
    1. PC Register
      • 스레드 시작시 생성되며, 생성될 때마다 생성되는 공간으로 스레드별 하나씩 존재
      • 스레드가 어떤 부분을 어떤 명령으로 실행하는 지에 대한 기록으로 현재 수행 중인 JVM 명령의 주소를 가짐
    2. JVM 스택
      • 프로그램 실행과정에서 임시로 할당되었다가, 메소드 빠져나가면 소멸되는 특성의 데이터가 저장되는 공간
      • 변수, 임시 데이터, 스레더느 메소드의 정보 등을 저장
    3. Native method stack
      • 바이트코드가 아닌 실제 실행 가능한 기계어로 작성된 프로그램 실행시키는 영역
      • Java가 아닌 다른언어로 작성된 코드를 위한 공간
    4. Method Area
      • 클래스 정보를 처음 메모리 공간에 올릴 때 초기화되는 대상 저장을 위한 메모리 공간
    5. Runtime Constant Pool
      • 스태틱 영역에 존재함
      • 상수 자료형을 저장해 참조하고 중복을 제어
      • 멤버 변수, 메소드, 타입 등이 저장됨
    6. Heap 영역

참조

profile
차근차근 기록하고 배우는 개발자

0개의 댓글