Java

[Java] JVM 과 구조

yerimkoko 2022. 6. 17. 16:05
728x90

더 자바

JVM (Java Virtual Machine)

  • 자바 가상 머신으로 .class 파일을 os에 특화된 코드로 변환하여 실행한다.
  • 바이트 코드를 실행하는 표준이자 (JVM 자체는 표준) 이자 구현체다.
  • jvm 밴더: 오라클, 아마존,…..
  • 특정 플랫폼에 종속적이다.

JRE (Java Runtime Environment): JVM + 라이브러리

  • 자바 애플리케이션을 실행할 수 있도록 구성된 배포판.
  • JVM과 핵심 라이브러리 및 자바 런타임 환경에서 사용하는 프로퍼티 세팅이나 리소스 파일

JDK (Java Development Kit): JRE + 개발툴

  • JRE + 개발에 필요할 툴
  • 오라클은 자바 11부터 JDK만 제공하며 JRE 따로 제공 x

자바는

  1. 오라클에서 만든
  2. Oracle JDK 11 버전부터
  3. 상용으로 사용할 때

위 3가지 조건을 모두 만족할 때 유료이다. (하나라도 만족하지 못 할 시 무료다)

JVM 언어

  • JVM 기반으로 동작하는 프로그래밍언어
    • ex) 클로저, Kotlin, Scala …

JVM 구조

 

클래스 로더 시스템

  • .class에서 바이트코드를 읽고 메모리에 저장
  • 로딩: 클래스 읽어오는 과정
  • 링크: 레퍼런스를 연결하는 과정
  • 초기화: static 값들 초기화 및 변수에 할당

메모리

  • 메서드 영역에는 클래스 수준에 정보 (클래스 이름, 부모 클래스 이름, 메소드, 변수) 저장 공유 자원이다.
  • 힙 영역에는 객체를 저장. 공유 자원이다.
  • 스택 영역
    • 쓰레드마다 런타임 스택을 만들고 그 안에 메소드 호출을 스택 프레임이라 부르는 블럭으로 쌓는다. 쓰레드 종료하면 런타임 스택도 사라진다.
  • PC(Program Counter) 레지스터: 쓰레드마다 쓰레드 내 현재 실행할 스택 프레임을 가리키는 포인터가 생성

실행엔진

  • 인터프리터: 바이크 코드를 한 줄씩 실행.
  • JIT 컴파일러: 인터프리터 효율을 높이기 위해 반복되는 코드를 발견하면 JIT 컴파일러로 모두 네이티브 코드로 컴파일된 코드를 바로 사용한다.
  • GC(Garbage Collector): 더 이상 참조되지 않는 객체를 모아서 정리한다.

JNI(Java Native Intergace)

  • 자바 application 에서 c, c++로 작성된함수를 사용할 수 있는 방법 제공

네이티브 메소드 라이브러리

  • c, c++로 작성된 라이브러리

참조: 백기선 더 자바