JVM(Java Virtual Machine)

yjung·2023년 2월 1일

Java

목록 보기
1/2

자바에 작성한 클래스필드가 메모리 구조상에서 어떻게 save & load 되고 메모리 관리가 되는지, 프로젝트 폴더에 있는 .class 라는 파일이 빌드간에 왜 생성되고 무슨 역할을 하며 어떻게 실행되는 건지 알기 위해 JVM에 대해 공부 시작

JVM을 알아야 하는 이유?


→ 한정된 메모리를 효율적으로 사용하여 최고의 성능을 내기 위해서
→ 동일한 기능의 프로그램이더라도 메모리 관리에 따라 성능이 좌우되기 때문에 JVM이 하는 역할을 이해하고 메모리를 효율적으로 사용하여 최고의 성능을 낼 수 있을 것

1. JVM(Java Virtual Machine)


stack 기반의 가상 머신

JVM의 역할은 자바 어플리케이션을 Class Loader를 통해 읽어들여 Java API와 함께 실행하는 것

자바 어플리케이션OS(Operating Systme) 사이에 중재자 역할을 수행하여 Java가 OS에 구애받지 않고 재사용 가능하게 해준다

→ 자바 바이트 코드를 실행할 수 있는 주체

  • 자바 프로그램은 설치된 운영 체제에 대해서 독립적인 성격 ⇒ 컴퓨터에서 프로그램을 직접 실행하는게 아니라 인터페이스 역할을 하는 자바 가상 머신(Java virtual Machine)에 의해 실행되기 때문
    • JVM 덕분에 어떤 OS 환경에서도 수행될수 있게 됨.

2. JVM 구성 요소


  1. Class Loader
  2. Excution Engine
  3. Runtime Data Area
  4. Garbage Collector

2.1. Class Loader


.java 확장자를 가지는 파일들은 자바 컴파일러(javac)에 의해 자바 바이트 코드로 작성된 .class 확장자를 가지는 파일로 변환된다.

Class Loader는 생성된 클래스 파일들을 JVM의 메모리 영역인 Runtime Data Area로 적재하는 역할을 수행한다.

2.2. Excution Engine


실행 엔진(Excution Engine)은 메모리에 적재된 클래스(바이트 코드)들을 기계어로 변경하여 명령어 단위로 실행. 이때 바이트 코드를 운영체제에 맞게 해석해주는 역할을 수행한다.

실행 엔진바이트 코드를 명령어 단위로 읽어서 수행하는데 두가지 방식이 존재한다.

  • 인터프리터(Interpreter) - 한 줄씩 해석하고 실행
  • JIT(Just In Time) - 바이트 코드를 native code로 변경 후 실행

2.3. Runtime Data Area


JVM이 운영체제로부터 할당받은 메모리 영역. JVM은 이 영역에 자바 어플리케이션에서 사용하는 데이터들을 적재한다.

이 영역은 크게 5개의 영역으로 나눌수 있다.

  • 메소드 영역(Method Area or Static Area)
  • 힙 영역(Heap Area)
  • 스택 영역(Stack Area)
  • PC register
  • Native Method Stack

2.4. Garbage Collector


Heap 메모리 영역에 생성된 객체들 중에 참조되지 않은 객체들을 탐색 후 제거하는 역할을 수행

  • 가비지 컬렉션 종류
    • Major Garbage Collection - Old, Perm 메모리 영역에서 발생하는 GC
    • Minor Garbage Collection - Young 메모리 영역에서 발생하는 GC
    • Full Garbage Collection - 메모리 전체를 대상으로 수행하는 GC
  • 가비지 컬렉터 종류
    • Serial Garbage Collector
    • Parallel Garbage Collector
    • CMS Garbage Collector
    • G1 Garbage Collector(JDK7)
    • Epsilon Garbage Collector(JDK11)
    • Z garbage collector(JDK11)
    • Shenandoah Garbage Collector(JDK12)

간단 정리


  • 바이트 코드(.class)OS에 맞는 기계어로 변환하고, 이를 Class Loader에서 읽어와 Runtime Data Area에 저장/관리 하고, 이를 Excution Engine에서 바이트 코드 명령어 단위로 읽어들여 실행하며 Garbage Collector로 메모리 관리를 하는 가상머신을 말한다

Reference


profile
42cadet

0개의 댓글