[Java] JVM 구조 및 동작 과정

Jun·2023년 2월 8일

Java

목록 보기
2/2
post-thumbnail

📙 JVM 이란 ?

JVM 이란 Java Vertual Machine의 줄임말로 Java Application과 OS와 중간에서 동작하는 가상 머신을 말한다.

📖 JVM의 장점

  1. 어떤 OS에서도 실행될 수 있다.
  2. 자발적으로 메모리를 관리하는 Garbarge Collcector 가 존재하여 개발자들이 메모리 관리에 많은 신경을 쓰지 않아도 된다.

📙 JVM 구조 및 동작과정

JVM구조

📖 동작 과정

  1. Class Loader가 Compile 된 Java Application의 .class 파일들을 JVM 영역으로 로드한다.
  2. Execution Engine ( 실행 엔진 ) 이 .class 파일을 해석한다.
  3. 해석된 바이트 코드를 용도에 맞게 RunTime Data Area의 여러 영역으로 나누어 위치시킨다.
  4. RunTime Data Area에 위치된 바이트 코드가 실질적으로 프로그램을 동작시킴.

1번 과정 이전에 이루어지는 Compile과 Build 에 대해서는 Java Compile / Build 를 참고하길 바랍니다.

📖 Java Complier

  • .java로 만들어진 소스코드를 .class 파일로 변환시킴. ( Complie )

📖 Class Loader

  • .class로 변환된 바이트코드를 JVM 내로 Load 함.
  • .class 파일을 기계어로 번역하여 Runtime Data Area에 배치함.

📖 Execution Engine

  1. Interpreter 방식
  • 실행 중 프로그래밍 언어를 한 줄 씩 읽어가면서 해당 기능에 대응하는 기계어 코드를 실행
  • 실행 시 마다 한 줄씩 읽기 때문에 실행 속도가 매우 느림
  1. JIT 컴파일 방식
  • 실행 시점에서 Interpreter 방식으로 읽은 코드들을 캐싱하여 같은 함수가 존재하면 캐싱되어 있는 값을 사용한다.
  • 캐싱되어 있는 값을 사용하기 때문에 매번 기계어 코드를 생성하는 것을 방지하고 시간을 단축시켜준다.

📖 Garbarge Collector ( GC )

RunTime Data Area에 배치된 인스턴스들 중 더 이상 사용하지 않는 인스턴스에 대해 메모리 해제를 진행한다. JVM 내에서 Garbage Colector 덕분에 예전보다는 개발자가 메모리 사용보다는 기능 구현에 조금 더 집중할 수 있다고 생각한다.

Heap 메모리 영역에서 참조되지 않는 객체들을 탐색 후 삭제하며 메모리 재활용을 진행함.

📖 Runtime Data Area

Runtime Data Area는 총 5가지의 영역으로 구분된다.

  1. PC Register
  • Thread가 어떤 명령어로 실행되어야 할지 기록하는 부분 ( JVM 명령의 주소를 가진다. )
  1. JVM Stack
  • 지역 변수, 매개변수, 메서드 정보, 임시 데이터 등을 저장하는 부분
  1. Native Method Stack
  • 실제 실행할 수 있는 기계어로 작성된 프로그램을 실행시키는 영역
  1. Heap
  • 런타임에 동적으로 할당되는 데이터가 저장되는 영역. 객체나 배열 생성이 해당됨.
  • GC의 주요 대상이 되며, JVM 성능 이슈에 대해 가장 많이 언급되는 공간.
  1. Method Area
  • JVM이 실행될 때 생성되며, JVM이 읽은 각각의 클래스와 인터페이스에 대한 런타임 상수 풀, 필드 및 메서드 코드, 정적 변수, 메서드의 바이트 코드 등을 보관함.
profile
I'll be a Back-End Developer

0개의 댓글