보통사람

[Study-1주차] JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가 본문

Study

[Study-1주차] JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가

pej4303 2020. 11. 21. 01:42
  • 목표

    • 자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기

  • 학습할 것 

    • JVM이란 무엇인가

    • 컴파일 하는 방법

    • 실행하는 방법

    • 바이트코드란 무엇인가

    • JIT 컴파일러란 무엇이며 어떻게 동작하는지

    • JVM 구성 요소

    • JDK와 JRE의 차이

 

1. JVM이란?

 

JVM(Java Virtual Machine)은 자바를 실행하기 위한 가상 머신을 의미합니다. Java로 작성된 프로그램은 모두 JVM에서만 실행되기 때문에 Java가 실행되기 위해서는 반드시 JVM이 필요합니다.

 

Java 프로그램과 일반 프로그램 차이

 

그림처럼 JVM은 Java 프로그램과 OS 사이에 위치하여 중개자 역할을 합니다. Java는 JVM과 상호작용하기 때문에 OS가 달라져도 프로그램 변경 없이 실행이 가능하지만 JVM은 OS에 종속적이어서 OS별 해당하는 JVM이 필요합니다. 

 

2. 컴파일 하는 방법

 

아래의 명령어를 이용하여 자바 파일을 컴파일할 수 있습니다.

javac 자바파일명
javac Test.java

 

3. 실행 하는 방법

 

아래의 명령어를 이용하여 컴파일된 *.class파일을 실행시킬 수 있습니다.

javac 파일명
javac Test

 

4. 바이트코드란?

 

자바 소스 코드를 JVM이 이해 할 수 있는 코드로 컴파일한 것을 의미하며 JVM은 컴파일된 바이트코드(Bytecode)를 OS에 맞는 기계어로 다시 컴파일합니다.

 

5. JIT 컴파일러란?

 

JIT(Just-in-time)은 JVM에서 컴파일된 바이트코드를 기계어로 다시 컴파일할 때 사용하는 방식으로 한 줄씩 읽어서 하는 인터프리터(Interpreter) 방식을 보완하기 위해서 나왔습니다. 컴파일을 하면서 해당 코드를 캐싱하고 이후에 변경된 부분만 컴파일하고 나머지는 캐싱된 코드를 사용합니다.

 

6. JVM 구성 요소

 

  • Class Loader

    • JVM에 *.class 파일을 로드하는 역할

    • 실행 시 동적으로 클래스를 로드

  • Execution Engine

    • 클래스 실행시키는 역할

  • Interpreter

    • Execution Engine에서 기계어로 컴파일하는 방식 중 하나로 한 줄씩 수행하는 방법

  • JIT 컴파일러

    • Interpreter 방식을 보완하기 위해서 나온 방식

  • Garbage Collector

    • 할당된 메모리 중 사용되지 않는 메모리를 정리하는 역할

7. JDK와 JRE의 차이

 

  • JDK(Java Development Kit)

    • 자바 개발 도구

    • JRE + 개발에 필요한 실행파일들

  • JRE(Java Runtime Environment)

    • 자바 실행 환경

    • JVM + 클래스 라이브러리(Java API)

※ 참조

Java의 정석
namu.wiki/w/%EB%B0%94%EC%9D%B4%ED%8A%B8%EC%BD%94%EB%93%9C
namu.wiki/w/JIT
asfirstalways.tistory.com/158

 

 

'Study' 카테고리의 다른 글

[Study-6주차] 상속  (0) 2020.12.22
[Study-5주차] 클래스  (0) 2020.12.13
[Study-4주차] 제어문  (0) 2020.12.07
[Study-3주차] 연산자  (0) 2020.11.28
[Study-2주차] 자바 데이터 타입, 변수 그리고 배열  (0) 2020.11.21