호비시의 끄적끄적

JVM 본문

Back/Spring

JVM

호비시 2022. 6. 21. 09:00

JVM ?

Java Virtural Machine의 줄임말. 자바를 실행하기 위한 가상기계
Java의 특징으로는 OS에 종속되지 않는다는 점이 있는데, 이를 가능하게 하는 것이 JVM이다.

JVM 구성요소

  • 클래스 로더(Class Loader)
  • 실행 엔진(Execution Engine)
    1. 인터프리터(Interpreter)
    2. JIT 컴파일러(Just In Time)
    3. 가비지 콜렉터(Garbage Collector)
  • 런타임 데이터 영역(Runtime Data Area)

클래스 로더

JVM 내로 클래스파일을 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈
런타임 시 동적으로 클래스를 로드, jar 파일 내에 저장된 클래스들을 JVM 위에 탑재한다.

실행 엔진

클래스를 실행시키는 역할
클래스 로더가 JVM내의 런타임 데이터 영역에 바이트 코드를 배치시키고, 실행엔진에 의해 실행된다.

  1. 인터프리터
    실행 엔진은 자바 바이트 코드를 명령어 단위로 읽어서 실행한다.
  2. JIT
    인터프리터 방식으로 실행하다가, 적절한 시점에 바이트 코드 전체를 컴파일하여 기계어로 번역한다.
  3. Garbage Collector
    더이상 사용하지 않는 인스턴스를 찾아 메모리에서 삭제한다.

런타임 데이터 영역

프로그램을 수행하기 위해 OS에서 할당받은 메모리 공간

  • PC Register
    Thread가 시작될 때 생성되며 Thread마다 하나씩 존재한다.
    Thread가 어떤 부분을 어떤 명령으로 실행해야 할지에 대한 기록을 하는 부분이며, 현재 수행중인 JVM 명령 주소를 갖는다.

  • JVM stack 영역
    프로그램 실행 과정에서 임시로 할당되었다가, 메소드를 빠져나가면 바로 소멸되는 특성의 데이터를 저장하기 위한 영역
    임시 변수, 데이터, 스레드, 메소드의 정보를 저장한다. 메소드 안에서 사용되는 값들을 저장

  • Native Method Stack
    자바 프로그램이 컴파일되어 생성되는 바이트 코드가 아닌 실제 실행할 수 있는 기계어로 작성된 프로그램을 실행시키는 영역
    Java Native Interface를 통해 바이트 코드로 전환되어 저장한다. 일반 프로그램처럼 커널이 스택을 잡아 독자적으로 프로그램을 실행시킨다.

  • Method Area
    클래스 정보를 처음 메모리 공간에 올릴 때 초기화 되는 대상을 저장하기 위한 메모리 공간이다.

  • Runtime Constant Poll
    스태틱 영역이 존재하는 별도의 관리 영역. 상수 자료형을 저장하고, 참조하며 중복을 막는다.

  • Heap 영역
    객체를 저장하는 가상 메모리 공간. new 연산자로 생성되는 객체와 배열을 저장한다.

'Back > Spring' 카테고리의 다른 글

POJO 란?  (0) 2022.06.23
Spring WebFlux  (0) 2022.06.22
Apache Tomcat  (0) 2022.06.17
maven / gradle  (0) 2022.06.16
AOP  (0) 2022.06.15
Comments