JVM 메모리 구조

하마의 코딩일기·2022년 11월 9일

F-lab

목록 보기
7/7

JVM 이란
JVM은 Java Virtual Machine의 약자로, 자바 가상 머신이라고 부릅니다.
그리고 자바와 운영체제 사이에서 중개자 역할을 수행하며, 자바가 운영체제에 구애 받지 않고 프로그램을 실행할 수 있도록 도와줍니다.
또한, 가비지 컬렉터를 사용한 메모리 관리도 자동으로 수행하며, 다른 하드웨어와 다르게 레지스터 기반이 아닌 스택 기반으로 동작합니다.

JVM 메모리구조

  1. 자바 컴파일러에 의해 자바 소스 파일은 바이트 코드로 변환됩니다.

  2. 이러한 바이트 코드를 JVM에서 읽어 들인 다음에, 이것저것 복잡한 과정을 거쳐서 어떤 운영체제든간에 프로그램을 실행할 수 있도록 만드는 것입니다.

    만약, 자바 소스 파일은 리눅스에서 만들었고 윈도우에서 이 파일을 실행하고 싶다면, 윈도우 용 JVM을 설치만 하면 됩니다. 여기서 JVM은 운영체제에 종속적이라는 특징을 알 수 있습니다.

  3. 이 클래스 파일은 클래스 로더가 읽어들이면서 JVM이 수행됩니다.

  4. Class Loader

    JVM 내로 클래스 파일을 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈입니다. 런타임 시에 동적으로 클래스를 로드합니다.

  5. Execution Engine

    클래스 로더를 통해 JVM 내의 Runtime Data Area에 배치된 바이트 코드들을 명렁어 단위로 읽어서 실행합니다.
    최초 JVM이 나왔을 당시에는 인터프리터 방식이었기때문에 속도가 느리다는 단점이 있었지만 JIT 컴파일러 방식을 통해 이 점을 보완하였습니다. JIT는 바이트 코드를 어셈블러 같은 네이티 브 코드로 바꿈으로써 실행이 빠르지만 역시 변환하는데 비용이 발생하였습니다. 이 같은 이유로 JVM은 모든 코드를 JIT 컴파일러 방식으로 실행하지 않고, 인터프리터 방식을 사용하다가 일 정한 기준이 넘어가면 JIT 컴파일러 방식으로 실행합니다.

  6. Garbage Collector

    Garbage Collector(GC)는 힙 메모리 영역에 생성된 객체들 중에서 참조되지 않은 객체들을 탐색 후 제거하는 역할을 합니다. 이때, GC가 역할을 하는 시간은 언제인지 정확히 알 수 없습 니다.

  7. Runtime Data Area

    JVM의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역입니다. 이 영역은 크게 Method Area, Heap Area, Stack Area, PC Register, Native Method Stack로 나눌 수 있습니다.

  • Method Area (Class Area): 모든 쓰레드가 공유하는 영역으로 JVM이 시작될 때 생성됩니다. 클래스와 인터페이스의 상수, 메서드와 필드 정보, static 변수, 타입 정보 등을 보관합니다.
  • Heap Area: 동적으로 할당되는 데이터가 저장되는 영역으로, Garbage Collection에 의해 관리됩니다.
  • Stack Area: 메서드가 호출 되면 메서드 안에서 사용하는 값들과 매개 변수, 지역 변수, 리턴 값 등을 저장한 뒤, 메서드가 종료될 때 함께 삭제되는, 데이터들이 임시적으로 저장되는 영역입니다. 스택 영역이니 메서드가 호출되는 순서대로 쌓이겠죠?
  • PC Register: 현재 어떤 명령어가 실행되어야 하는지에 대해 저장하는 레지스터로, 현재 수행 중인 JVM 명령의 주소를 갖고 있습니다.
  • Native Method Stack: 자바 이외의 언어로 작성된 Native Code를 위한 영역입니다.
profile
시작이 반일까?

0개의 댓글