JVM의 구조

유수민·2022년 8월 7일
0

지식창고

목록 보기
43/60

📌JVM

  • Java virtual machine으로 자바의 바이트 코드를 실행할 수 있다.
  • 자바 코드를 컴파일 하여 바이트코드로 변환하여 해당 운영체제가 이해할 수 있는 기계어로 실행할 수 있게 한다.

📌JVM의 구성

  1. Class Loader
  2. Execution Engine (실행 엔진)
  3. 가비지 컬렉터
  4. Runtime Data Area

📌자바 어플리케이션 실행 과정

  1. 어플리케이션이 실행되면 JVM이 OS로부터 메모리를 할당받는다

    → JVM이 할당받은 메모리를 용도에 따라 영역을 구분하여 관리해준다.

  2. 자바 컴파일러가 자바소스코드(.java 우리가 작성한 코드 파일)를 읽어 바이트코드(.class)로 변환한다

  3. ClassLoader를 통해 바이트코드를 JVM으로 로딩한다 ( 이제부터 객체들이 메모리로 올라오는 작업을 한다)

  4. 로딩된 바이트코드는 실행엔진을 통해 해석된다.

  5. 해석된 바이트 코드는 Runtime Data Areas에 실행된다. 실행되는 과정에서 GC 과정이 수행된다.

📌구성에 대한 설명

📖Class Loader

  • JVM으로 바이트코드를 로드하고 링크를 통해 Runtime Data Area에 배치하는 작업을 수행하는 모듈
  • .class 바이트코드를 읽어 클래스 객체를 생성하는 역할

💡 클래스를 메모리에 올리는 로딩기능은 한번에 메모리에 올리지 않고 어플리케이션이 필요해서 호출할 경우 메모리에 적재하게 된다.

로딩기능 : loading → linking → initialization

📖Execution Engine

  • ClassLoader에 의해 읽어온 바이트코드를 기계어로 변환하여 읽어들이는 역할 수행.
  • Runtime Data Area에 할당된 바이트코드를 실행(=프로그램 실행)시키는 주체

    💡코드 실행방식
    1) Interpreter
    바이트코드를 해석하여 실행하는 역할. 실행할때마다 매번 새로 수행

    2) JIT Compiler
    코드를 발견하여 전체 바이트 코드를 컴파일하고 그것을 Native Code로 변경하여 사용

    변환 작업은 interpreter에 의해서 지속적으로 수행되지만, 필요한 코드의 정보는 캐시에 담아 두었다가 재사용한다.

📖가비지 컬렉터

  • 앞으로 사용되지 않는 객체의 메모리를 정해진 스케줄에 의해 정리해주는 것.
  • 자바의 메모리 관리 기법으로 어플리케이션이 동적으로 할당했던 메모리 영역 중 사용하지 않는 영역을 정리하는 기능
  • 힙 메모리에서 활동

📖RunTime Data Area

  • 어플리케이션이 동작하기 위해 OS에서 할당방은 메모리 공간을 의미한다.
  • 용도에 맞게 나누어서 관리하기 위해 쪼갠다.

📚1) Method Area

  • Static으로 선언된 변수들을 포함하여 Class레벨의 모든 데이터(바이트코드)가 이곳에 저장됨
  • Runtime Constant Pool 존재 : 상수 자료형을 저장하고 참조하는 역할
  • JVM마다 단 하나만 존재. ****여러 쓰레드가 공유

📚2) Heap

  • 객체를 저장하기 위한 메모리 영역
  • GC가 활동하는 구역이다.
  • 여러 쓰레드가 공유

📚3) Stack Area

  • 메소드를 호출할때마다 Stack Frame으로 불리는 Entry가 Stack Area에 생성된다. 이 Entry는 각종 형태의 변수나 임시 데이터, 쓰레드 또는 메소드의 정보를 저장한다.
  • 쓰레드 역할이 종료되면 바로 소멸되는 특성의 데이터를 저장한다.
  • 쓰레드마다 존재

📚4) PC Register (program counter register)

  • Thread가 생성될 때마다 생기는 공간으로 Thread가 어떠한 명령을 실행하게 될지에 대한 것을 기록한다.
  • 각 Thread는 어떤 메서드를 항상 실행하고 있고 PC는 그 메서드 안에서 몇번째 줄을 실행해야 하는지를 나타내는 역할
  • 쓰레드마다 존재

📚5) Native Method Stack

  • 바이트 코드가 아닌 실제 실행할 수 있는 기계어로 작성된 프로그램을 실행시키는 영역.
  • 자바가 아닌 다른 언어로 작성된 코드를 위한 영역.
  • java native interface를 통해 바이트 코드로 전환하여 저장한다.
  • 쓰레드마다 존재
profile
배우는 것이 즐겁다!

0개의 댓글