JVM(Java Virtual Machine)

조윤호·2023년 9월 29일
0

JAVA

목록 보기
1/1
post-thumbnail

JVM : Java Virtual Machine

  • 자바 프로그램이 실행되는 가상 머신이다.
  • 자바 어플리케이션이 어느 CPU나 OS에서도 실행될 수 있게 지원

기존 컴파일언어(C, C++ ...) vs JVM

  1. 기존의 컴파일 언어
  • 프로그래밍 언어가 컴파일되는 시점에서, 해당 운영체제에 맞는 binary code로 변환된다.
  1. JVM
  • 자바가 컴파일되는 시점에서는 java code -> java bytecode로 변환됨
  • java bytecode는 실행 시점에 JVM에 의해 실행된다.

JVM vs JRE vs JDK

  • JVM (Java Virtual Machine)
  • JRE (Java Runtime Environment) : JVM + 표준 라이브러리
  • JDK (Java Dev Kit) : JRE + 컴파일러 등 개발환경에 필요한 요소들

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

  1. 어플리케이션 실행 -> JVM이 OS로부터 메모리를 할당받는다.
  2. 자바 컴파일러가 자바 소스코드(.java)를 바이트코드(.class)로 변환
  3. Class Loader에서 바이트코드를 JVM으로 로딩한다.
  4. Execution Engine에서 바이트코드가 해석된다.
  5. 해석된 코드를 Runtime Data Area가 실행한다.

.class 파일 구조

  • Constant Pool

  • Bytecode

JVM 구성

Class Loader

  1. Loading
    • .class 코드 로딩
    • 한번에 모든 클래스를 올리지 않고, 필요할 때 동적으로 올림
  2. Linking
    • 클래스 간 연결구조 설정
  3. Initialization
    • Runtime Data Area에 배치

Runtime Data Area

  1. Method Area (모든 스레드 공유)
    • 클래스와 관련된 모든 정보가 저장된다.
    • Runetime Constant Pool : 상수 자료형을 저장하여 참조하는 역할
  2. Heap (모든 스레드 공유)
    • 런타임에 생성되는 모든 객체가 저장된다
    • 객체의 생성 및 소멸 처리
    • Young Generation : 생명주기가 짧은 객체 / Old Gen : 생명주기가 긴 객체
    • GC에 의해 지속적으로 메모리가 관리됨
      • Minor GC
      • Major GC
  3. JVM Stack (스레드별로 생성)
    • 메서드 호출과 관련된 정보를 저장한다.
    • 메서드가 호출될 때마다 Stack Frame 생성
    • 해당 메서드의 매개변수, 지역 변수, 메서드 호출 및 복귀 주소 등 저장
    • 프레임 구조
    • 지역변수 : Array의 형태로 저장되어 접근 가능
    • Operand Stack : 연산의 중간 결과물을 저장하는 stack
      image
  4. PC Registers (스레드별로 생성)
    • 현재 작업중인 program count의 위치를 기록 -> 멀티스레딩 환경에서 자신의 작업으로 돌아오기 위함
  5. Native Method Stacks (스레드별로 생성)
    • c/c++로 작성된 프로그램을 실행하기 위한 스택

Execution Engine

image 1. Interpreter - 바이트코드 해석하여 실행 2. JIT Compilor (just in time) - 반복되는 코드를 발견하여 전체 바이트코드를 컴파일하고 - Native Code(c/c++)로 변경하여 사용 3. Garbage Collector - 더이상 참조되지 않는 메모리 객체를 모아 제거 - performance tunning에서 가장 중요한 요소!

더 많은 내용이 궁금하다면?

소마 14기 CS스터디그룹 github

출처

profile
한걸음씩 성실히

0개의 댓글