본문 바로가기
카테고리 없음

[JAVA] JVM

by hbIncoding 2023. 10. 27.

1. JVM 

  • Java Virtual Machine 의 약자
    • 가성 머신 이란 프로그램을 실행하기 위해 물리적 머신과 유사한 머신을 소프트웨어로 구현한 것
  • 자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행하는 역할
  • JVM은 JAVA와 OS 사이에서 중개자 역할을 수행하여 Java가 OS에 구애받지 않고 독립적으로 작동이 가능하다
  • 가장 중요한 메모리 관리, Garbage colletion을 수행한다.

  1) JVM의 특징

  • 컴파일된 바이트 코드를 기계가 이해할 수 있는 기계어로 변환
  • 스택 기반의 가상 머신
  • 메모리 관리와 GC를 수행

 2) JVM의 구조

 

  • Class Loader : 클래스 파일을 Runtime Data Area의 메서드 영역으로 불러오는 역할
  • Execution Engine: class파일과 같은 ByteCode를 실행 가능하도록 해석한다.
  • GC(Garbage Collector): 메모리 관리 기법 중 하나, Heap 영역에 배치된 객체들을 관리하는 모듈
  • Runtime Data Area : 런타임 시 클래스 데이터와 같은 데타 데이터와 실제 데이터가 저장되는 곳, 프로그램을 수행하기 위해 OS로 부터 할당 받은 메모리 영역을 의미한다.(Java 메모리 공간), 그리고 이것은 아래와 같이 나뉘어진다.

3) Runtime Data Area 구조

 

  • Java는 멀티 스레드 환경으로 모든 스레드는 Heap, Method Area를 공유한다.
  • 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
    • 클래스 정보를 처음 메모리에 올릴 때 초기화 되는 대상을 저장하기 위한 영역
    • 올라가는 정보는 아래와 같다.
      • Field Imformation : 멤버 변수에 대한 정보(이름, 타입, 접근 지정자 등)
      • Method Imformation : 메서드에 대한 정보(이름, 리턴 타입, 파라미터, 접근 지정자 등)
      • Type Information : Class인지 Interface인지 혹은 Type의 속성, 이름 super class의 이름 등

 

2. 출처

1)JVM : https://backendcode.tistory.com/161

 

[IT 기술 면접] JVM (자바 가상 머신) 이란?

이번에는 JVM에 대해 정리할 것이다. ▶ JVM 이란? JVM이란 Java Virtual Machine, 자바 가상 머신의 약자를 따서 줄여 부르는 용어이다. (가상 머신이란 프로그램을 실행하기 위해 물리적 머신과 유사한

backendcode.tistory.com