Skip to content

김승수, 김현수, 이호석 JVM

이호석 edited this page Jul 10, 2024 · 4 revisions

JVM 이란

Java Virtual Machine Java로 작성된 언어 혹은 JVM을 사용하는 언어를 실행시키기 위한 가상 머신 입니다.

JVM 구성요소

image

https://medium.com/java-for-beginners/understanding-java-virtual-machine-jvm-architecture-e68d1c611026

  • ClassLoader: .java 코드를 컴파일한 .class 파일인 바이트코드를 읽어 Runtime Data Area에 적재하는 과정을 진행합니다.

    • Loading
      • 클래스를 로딩하는 과정 3가지의 대표적인 클래스로더를 거쳐서 클래스를 로딩함 → 안되면 ClassNotFoundException
        • 조회 순서는 Application → Extension → Bootstrap
        • 반환 순서는 Bootstrap → Extension → Application
      • 로드 타임 동적 로딩, 런타임 동적 로딩이 존재함

    image

    • Linking

      • 검증 : 클래스가 자바 언어 명세 및 JVM 명세에 명시된데로 구성되어 있는지 검사함
      • 준비 : 클래스가 필요로 하는 메모리를 할당한다. 필드, 메소드, 인터페이스를 나타내는 데이터 구조를 준비함
      • 분석 : 심볼릭 레퍼런스(클래스 상수 풀 내 모든 심볼릭 레퍼런스 #10과 같은)를 실제 메모리 레퍼런스로 교체
      • 클래스 로딩 과정에서 제일 오래 소요되는 과정입니다.
    • Initalization

      • 링크 단계에서 확보된 메모리 영역에 클래스의 static 변수를 명시된 값으로 할당함
  • Runtime Data Area : JVM의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적재하는 영역이다.

    • Method Area
    • Heap Area
    • Stack Area
      • Operand Stack
      • PC Registers
      • Native Method Stack
  • Execution Engine : 메모리에 적재된 바이트코드들을 기계어로 번역해 명령어 단위로 실행하는 역할을 한다.

    • 인터프리팅을 기반으로 진행하는데, JIT 컴파일러가 네이티브 코드로 컴파일해주어(재사용할 수 있게) 최적화를 해줍니다.
    • Garbage Collector가 Heap 영역에서 참조가 사라진 객체들을 메모리를 회수해준다.
  • Native Method Interface(JNI): 자바 애플리케이션이 네이티브 코드를 호출할 수 있도록 하는 인터페이스이다. (네이티브 코드는 C, C++로 작성되어 있는 라이브러리 형태)

    • 파일을 읽거나, 소켓을 만들거나, 스레드를 만들때(네이티브 스레드를 사용하고 있으므로) 사용된다.

👼 개인 활동을 기록합시다.

개인 활동 페이지

🧑‍🧑‍🧒‍🧒 그룹 활동을 기록합시다.

그룹 활동 페이지

🎤 미니 세미나

미니 세미나

🤔 기술 블로그 활동

기술 블로그 활동

📚 도서를 추천해주세요

추천 도서 목록

🎸 기타

기타 유용한 학습 링크

Clone this wiki locally