본문 바로가기

Back-end/Java

[Java] JVM의 구조와 Java의 컴파일 과정

JVM 구조

자바 가상 머신(Java Virtual Machine) 의 약자를 따서 줄여 부르는 용어로 JVM의 역할자바 애플리케이션클래스 로더를 통해 읽어 자바 API와 함께 실행하는 것입니다. 메모리 관리(GC)를 수행하며 스택 기반의 가상머신입니다.



JVM의 구조는 Class Loader, Execution engine, Runtime Data Area, JNI, Native Method Library로 이루어져 있습니다.

  • 클래스 로더(Class Loader): JVM내로 클래스를 로드하고, 링크를 통해 배치하는 작업을 수행하는 모듈
  • 실행 엔진(Execution engine): 바이트 코드를 실행시키는 역할
    • 인터프리터(Interpreter): 바이트 코드를 한줄씩 실행합니다.
    • JIT 컴파일러: 인터프리터 효율을 높이기 위한 컴파일러로 인터프리터가 반복되는 코드를 발견하면 JIT 컴파일러가 반복되는 코드를 네이티브 코드로 바꿔줍니다. 그 다음부터 인터프리터는 네이티브 코드로 컴파일된 코드를 바로 사용합니다.
    • GC(Garbage Collector): 가비지 컬렉터로 힙 영역에서 사용되지 않는 객체들을 제거하는 작업을 의미합니다.
  • Runtime Data Areas: 프로그램 실행 중에 사용되는 다양한 영역입니다.
    • PC Register: Thread가 시작될 때 생성되며 현재 수행중인 JVM 명령의 주소를 갖고 있습니다.
    • Stack Area: 지역 변수, 파라미터 등이 생성되는 영역. 실제 객제는 Heap에 할당되고 해당 레퍼런스만 Stack에 저장됩니다.
    • Heap Area: 동적으로 생성된 오브젝트와 배열이 저장되는 곳으로 GC의 대상 영역입니다.
    • Method Area: 클래스 멤버 변수, 메소드 정보, Type 정보, Constant Pool, static, final 변수 등이 생성됩니다. 상수 풀(Constant Pool)은 모든 Symbolic Reference를 포함하고 있습니다.
  • JNI(Java Native Interface): 자바 애플리케이션에서 C, C++, 어셈블리어로 작성된 함수를 사용할 수 있는 방법을 제공해줍니다. Native 키워드를 사용하여 매서드를 호출합니다. 대표적인 메서드는 Thread의 currentThread()입니다.
  • Native Method Library: C, C++로 작성된 라이브러리 입니다.



https://github.com/gyoogle/tech-interview-for-developer/blob/master/Language/%5Bjava%5D%20자바%20가상%20머신(Java%20Virtual%20Machine).md

 

 

Java의 컴파일 과정


https://github.com/gyoogle/tech-interview-for-developer/blob/master/Language/%5Bjava%5D%20자바%20컴파일%20과정.md