글애서 JVM이 뭔데! 🕵️‍♂️

한꼬북·2021년 7월 2일
0

Java

목록 보기
3/7
post-thumbnail

JVM 💻

자바 가상 머신(Java Virtual Machine) OS에 구애 받지 않고
Java를 실행할 수 있도록 OS와 Java 사이에서 .class파일 해석을 담당하는 착한녀석👼

1. 구성요소 🧬

  • Class Loader
    Javac에 의해 컴파일 된 .class 파일들을 실행해 기계어로 해석한 뒤
    Runtime Data Area에 배치하는 역활

  • Execution Engine
    .class 파일을 기계어로 변환, 실행하는 역활
    Interpreter와 JIT Compiler가 있음

  • Garbage Collector
    Heap영역에 생성된 객체들을 관리
    참조가 없는 객체들을 제거하며 메모리 관리를 담당

  • Runtime Data Area
    OS로 부터 JVM이 프로그램을 수행하기 위해 할당받는 메모리 영역
    공유 스레드에서 동작 하는 Heap, Method Area
    각각의 스레드에서 동작하는 Stack Area, PC Resisters, Native Method Stack로 나누어짐

2. 컴파일 및 실행 🎮

  • Build시 자바 컴파일러 Javac를 통해 .java파일을 .class(바이트코드)로 컴파일
  • .class 파일을 Class Loader가 실행하고 기계어로 해석한 다음 RunTime Data Area에 배치
    실직적으로는 Execution Engine인 interpreter와 JIT Compiler가 OS에 맞는 기계어로 해석

3. JDK, JRE??? 🙄

  • JDK
    Java Development Kit으로 자바 프로그래밍을 위한 라이브러리 및 기타 파일들의 모음
    설치시 JRE도 같이 설치됨

  • JRE
    Java Runtime Enviroment로 .java 파일을 실행할 수 있는 라이브러리 및 기타 파일들의 모음
    JDK는 포함돼 있지 않음


    참고로 JSP를 이용해 view 구성을 할 때에는 JRE만으로 불가능 애플리케이션 서버가 JSP를 servlet으로 변환하고 JDK를 이용해 servlet를 컴파일 해야하기 때문

4. 기타 🎮

  • JIT Compiler
    JUST IN TIME으로 Interpreter의 느린 속도를 개선하기 위해서 만들어짐,
    프로그램을 실제 실행하는 시점에 기계어로 번역하는 Compiler기 때문에
    초기 실행속도가 느릴 수 있고 반복적인 작업을 할 경우 훨씬 좋은 성능을 기대할 수 있음

  • 바이트 코드
    특정 하드웨어에 대한 낮은 의존성과 보다 쉬운 인터프린팅 결과를 만들기 위한 이진 표현법
    가상머신이 이해할 수 있는 언어 (바이트 코드 ≠ 바이너리 코드)
    실행하기 위해서는 기계어로 해석이 필요
profile
오히려 좋아, 자 가보자고!

0개의 댓글