성능확인 방법_JVM

공호진·2024년 5월 12일
0
post-custom-banner

Jvm 이란?

  • Java Virtual Machie의 약자로 자바 애플리케이션이 수행되는 런타임 엔진
  • JVM은 JRE(Java Runtime Environment)의 일부분에 속함

이미지출처

자바 컴파일 절차


JVM Model

클래스 로딩 절차

Loding -> Linking -> Initializing

  1. Loading

    • 컴파일된 .class 파일을 읽음

    • 바이너리 코드들을 읽어서 Method Area에 저장함

      • 패키지명, 클래스명을 저장
      • 부모 클래스 정보도 저장
      • class, interface, enum 여부를 저장
      • 접근제어자, 변수, 메서드 정보 등 저장
    • 힙메모리에 Class 타입의 객체를 저장

  2. Linking

    • Verification > Preparation > Resolution 3 단계를 거친다.

      Verification

      • .class 파일이 제대로 된 클래스 파일인지를 검증
      • ByteCodeVerifier라는 컴포넌트를 통해서 진행
      • 이 단계를 거친 후 컴파일 준비가 완료됨

      Preparation

      • 클래스에 있는 static 변수들을 기본 값으로 메모리에 할당

      Resolution

      • 해당 타입의 Symbolic references (심볼릭 참조) 를 Direct references (직접 참조) 로 변경되는 엔티티들은 Method Area를 검색하여 수행
  3. Initializing
    - static 변수들의 값을 static 블록에서 선언한 값으로 지정

    • 클래스의 위에서부터 아래로 내려가면서 진행되며, 부모 클래스를 처리한 후 자식 클래스를 처리함

Class Loader 의 종류

이미지참조

BootStrap class loader

자바가 설치된 경로(JAVA_HOME)/jre/lib 에 있는 파일들을 로드

  • 이 경로를 bootstrap path 라고 부른다.
  • C/C 와 같은 네이티브 언어로 되어 있음

Extenstion class loader

  • BootStrap class loader의 자식 클래스 로더
  • JAVA_HOME/jre/lib/ext 에 있는 파일들을 로드하거나 java.ext.dirs 속성값에 지정된 경로에 있는 파일들을 로드

System/Application class loader

  • Extenstion class loader 의 자식 클래스 로더
  • 애플리케이션의 classpath 에 지정된 클래스들을 로드

JVM 의 메모리 영역

이미지출처

Execution Engine(실행 엔진)

실행 엔진의 구성 3가지로 구성

Interpreter, JIT(just-in-time Compiler), GC(Garbage Collector)

Interpreter

  • 바이트 코드를 라인 단위로 읽어서 번역하고 실행
  • 반복되는 부분이 있어도 계속 번역 작업 수행

JIT

  • interpereter를 효율적으로 활용하기 위해서 사용
  • 모든 바이트 코드를 컴파일한 후 네이티브 코드로 변경
  • interpreter 가 반복적인 메소드 호출이 있을 떄, JIT 에서 해당 부분에 대한 네이티브 코드를 제공

GC(garbage collector)

사용하지 않는 객체 정리

profile
내일 더 나은 개발자가 되기 위해, 오늘을 기록합니다
post-custom-banner

0개의 댓글