[Java] JVM

Jeon817·2024년 1월 15일

Java

목록 보기
4/4

[JVM 이란 무엇인가?]

  • JVM은 Java Virtual Machine으로 자바를 실행하기 위한 가상의 기계(컴퓨터)입니다.
    Java는 OS에 종속되지 않는다는 특징이 있습니다. 때문에 OS 위에서 Java를 실행시킬 무언가가 필요했기에 JVM이 등장하게 되었습니다.
    즉, JVM은 OS에 종속되지 않고 CPU가 Java를 인식, 실행할 수 있게 하는 가상의 컴퓨터인 것입니다.

[JVM의 특징]

1) 컴파일된 바이트 코드를 기계가 이해할 수 있는 기계어로 변환한다.
2) 스택 기반의 가상 머신이다.
3) 메모리 관리와 Garbage Collector를 수행한다.


[JVM 구조와 작동 원리]

  • JVM의 구조에는 크게 Class Loader, Runtime data areas, Execution Engine, GC 으로 나누어져 있다.

    • Class Loader는 클래스 파일을 Runtime Data Area의 메서드 영역으로 불러오는 역할을 한다.

    • Execution Engine은 class파일과 같은 ByteCode를 실행 가능하도록 해석한다.

    • GC(Garbage Collector)는  메모리 관리 기법 중 하나로, Heap 영역에 배치된 객체들을 관리하는 모듈이다.

    • Runtime Data Area는 런타임 시 클래스 데이터와 같은 메타 데이터와 실제 데이터가 저장되는 곳이다. 간단하게 말하자면 프로그램을 수행하기 위해 OS로부터 할당받은 메모리 영역을 의미한다. (Java 메모리 공간)
      Runtime Data Area에는 또다시 Method Area, Heap, PC Registers, Java Stacks, Native Method Stacks로 나누어진다.

  • PC Register
    JVM은 스택 기반의 가상 머신으로, CPU에 직접 접근하지 않고 Stack에서 주소를 뽑아서 가져온다. 가져온 주소는 PC Register에 저장된다.
    따라서, 현재 어떤 명령을 실행해야 할 지에 대한 기록을 담당

  • JVM Stacks
    호출된 메서드의 파라미터, 지역 변수, 리턴 값 및 연산 값 등이 저장되는 영역
    프로그램 실행 시 임시로 할당되었다가 메서드를 빠져나가게 되면 소멸되는 특성의 데이터들이 저장되는 영역 메서드 호출 시마다 스택에 각각의 스택 프레임이 생성되고, 수행이 끝나면 스택 포인트에서 해당 프레임을 제거

  • Native Method Stacks
    Java 이외의 언어에 제공되는 Method의 정보가 저장되는 공간 / Java Native Interface를 통해 바이트 코드로 저장 Kernel이 자체적으로 Stack을 잡아 독자적으로 프로그램을 실행시키는 영역

  • Heap
    GC(가비지 컬렉션)의 대상이 되는 영역.
    객체를 동적으로 생성하게 되면 인스턴스가 Heap 영역의 메모리에 할당된다.
    단, 레퍼런스 변수의 경우, Heap에 인스턴스가 저장되는 것이 아닌 포인터가 저장된다.

  • Method Area
    클래스 정보를 처음 메모리에 올릴 때 초기화되는 대상을 저장하기 위한 영역
    올라가는 정보는 다음과 같다.

0개의 댓글