JVM & 메모리 구조

강민수·2022년 11월 7일
1

Java

목록 보기
1/9
post-thumbnail

JVM & 메모리 구조


What is JVM


JVM의 특징

  1. 시스템 메모리를 관리하고 Java 기반 애플리케이션을 위한 휴대용 실행 환경을 관리한다
  2. 다른 프로그램을 실행하는데 목적을 둔 프로그램이다

JVM의 기능

  1. 어느 장치나 OS에서도 자바 프로그램이 실행될 수 있게 한다
  2. 프로그램 메모리를 관리하고 최적화한다

자바 프로그램의 실행과정

  1. 프로그램이 실행되면 JVM은 OS로부터 이 프로그램이 필요로 하는 메모리를 할당받는다.

    JVM은 이 메모리를 용도에 따라 여러 영역으로 나눠 관리한다.
  2. 자바 컴파일러가 자바 소스코드를 읽어들여 자바 바이트코드로 변환시킨다.
  3. Class Loader를 통해 class파일들을 JVM으로 로딩한다.
  4. 로딩된 class 파일들은 Execution engine을 통해 해석된다.
  5. 해석된 바이트코드는 Runtime Data Area에 배치되어 실질적인 수행이 이루어지게 된다.

JVM의 구성

  • Class Loader(클래스 로더)

    • JVM내로 클래스 파일들을 로드하고, 링크를 통해 배치하는 작업을 수행한다.
    • jar파일 내 저장된 클래스들을 JVM위에 탑재하고 사용하지 않는 클래스들은 메모리에서 삭제한다.
    • 컴파일 타임이 아니라 런타임에 참조한다.
  • Execution Engine(실행 엔진)

    • 클래스를 실행시키는 역할
    • 바이트코드를 실제로 JVM내부에서 기계가 실행할 수 있는 형태로 변환 (이때 2가지 방식을 사용한다)
    • Interpreter(인터프리터)

      • Execution Engine은 자바 바이트 코드를 명렁어 단위로 읽어서 실행한다.
      • 한 줄 씩 수행하기 때문에 느리다는 단점이 있다.
    • JIT(Just-In-Time)

      • 인터프리터의 단점을 보완하기 위해 도입된 컴파일러다.
      • 인터프리터 방식으로 실행하다가 적절한 시점에 네이티브 코드로 변경하고, 이후에는 네이티브 코드로 직접 실행하는 방식
      • 네이티브 코드는 캐시에 보관하기 때문에 한 번 컴파일된 코드는 빠르게 수행한다.
      • 내부적으로 해당 메서드가 얼마나 자주 수행되는지 체크하고, 일정 정도를 넘을 때에만 수행한다.
  • Runtime Data Area

  • PC Register
    • Thread가 시작될 때 생성되며 나오는 공간으로 스레드마다 하나씩 존재한다.
    • 현재 수행중인 JVM 명령의 주소를 갖는다.
  • JVM 스택 영역
    • 프로그램 실행과정에서 임시로 할당되었다가 메서드를 빠져나가면 소멸되는 특정 데이터를 저장하기 위한 영역
    • 각종 형태의 변수, 임시 데이터, 스레드, 메소드의 정보를 저장한다.
    • 메서드 호출 시마다 각각의 스택 프레임이 생성된다.
    • 메서드 수행이 끝나면 프레임 별로 삭제한다.
    • 메서드 안에서 사용되는 값들을 저장한다.
  • Native method stack
    • 실제 실행할 수 있는 기계어로 작성된 프로그램을 실행시키는 영역
    • JAVA가 아닌 다른 언어로 작성된 코드를 위한 공간
    • 이 부분을 통해 C code를 실행시켜 Kernel에 접근할 수 있다.
  • Method Area
    • 클래스 정보를 처음 메모리 공간에 올릴 때 초기화되는 대상을 저장하기 위한 메모리 공간
    • Runtime Constant Pool은 상수 자료형을 저장하여 참조하고 중복을 막는 역할을 수행
      • 올라가는 정보의 종류
      1. Field Information

        멤버변수의 이름, 데이터 타입, 접근 제어자에 대한 정보
      2. Method Information

        메서드의 이름, 리턴타입, 매개변수, 접근제어자에 대한 정보
profile
능동적으로 개발 지식을 찾아다니는 백엔드 개발자입니다 😊 작성된 글에 대한 질문들 및 피드백은 언제나 환영입니다 :) 👌

0개의 댓글