자바 스터디

1주차 과제: JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가.

삶은겨란 2022. 5. 16. 17:13

목표

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

목차

1. 컴파일 하는 방법

2. 실행하는 방법

3. 바이트코드란 무엇인가

4. JVM이란 무엇인가

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

6. JVM 구성 요소

7. JDK와 JRE의 차이

 

https://docs.oracle.com/javase/tutorial/index.html


1. 컴파일 하는 방법

(1) 컴파일러

고급 언어로 작성된 파일을 컴퓨터가 이해할 수 있는 기계어로 번역하고 그 결과인 목적 파일을 만든다. 그리고 그 과정을 컴파일이라고 한다.

 

(2) 컴파일 언어 종류

C, C++, Java, C#

 

(3) 인터프리터 언어

컴파일러를 거치지 않고 바로 실행할 수 있는 프로그래밍 언어

- 종류: Python, PHP, JavaScript, Ruby

 

(4) 컴파일 방법

  1. cmd에서 자바 파일이 있는 위치로 이동한다.
  2. 컴파일: javac 파일이름.java
  3. 클래스 파일 실행: java 파일이름

 

 

2. 실행하는 방법

https://docs.oracle.com/javase/tutorial/index.html

자바 언어로 작성한 소스파일(.java)이 컴파일러에 의해 컴파일 한다.->자바 바이트 코드(.class)가 생성된다.

가상 머신이 이해할 수 있는 자바 바이트 코드(.class)를 JVM이 읽고 실행한다.

 

 

3. 바이트 코드

위에서 소스파일을 컴파일 하면 바이트 코드가 생성된다는 것을 알았다.

바이트 코드는 기계어는 아니지만 JVM이 이해할 수 있어 기계어로 변환할 수 있는 코드를 말한다.

자바 바이트 코드는 JVM이 설치된 어떤 운영체제에서든 실행될 수 있다. -> 플랫폼 독립적

 

 

4. JVM이란 무엇인가

Java Virtual Machine, 자바 가상 머신으로OS에 종속받지 않고 CPU가 자바를 인식해 실행할 수 있게 하는 가상 머신.

자바가 플랫폼 독립적일 수 있게 만든어준다.

JVM이 설치되어 있다면 운영체제에 구애받지 않고 실행할 수 있다.

 

 

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

(1) JIT 컴파일(just-in-time compilation) = 동적 번역(dynamic translation)

프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법.

JVM는 JIT 컴파일을 지원한다.

인터프리터 방식 + 정적 컴파일 방식

 

자바 컴파일러가 소스코드를 바이트코드로 변환한 다음, 실제 바이트코드를 실행하는 시점에서 JVM이 바이트코드를 JIT 컴파일을 통해 기계어로 변환한다.

인터프리트 방식으로 기계어 코드를 생성하여 캐시에 저장한다.(재사용시 다시 컴파일 할 필요가 없음)

JIT는 정적 컴파일러 만큼 빠르면서 인터프러터 언어의 빠른 응답속도를 추구하기 위해 사용한다.

 

 

6. JVM 구성 요소

https://aljjabaegi.tistory.com/387

(1) Class Loader

동적 로딩을 통해 필요한 클래스들을 로딩 및 링크하여 run time data area(JVM의 메모리)에 올린다.

  • 로딩: 클래스 읽기 (자바는 클래스로 구성되어 있음)
  • 링크: 래퍼런스 연결
  • 초기화: static 값 초기화 및 변수 할당

(2) Runtime Data Area

프로그램을 수행하기 위한 JVM의 메모리 공간

 

(3) Execution Engine

로딩된 클래스의 바이트 코드를 기계어로 변환

JIT 컴파일러 사용

Garbage Collection 포함(사용하지 않지만 할당되어 있는 메모리를 해제)

 

 

7. JDK와 JRE의 차이

(1) JDK(Java Development Kit)Java 환경에서 돌아가는 프로그램 개발에 필요한 도구를 모아놓은 SDKJava 프로그램 작성에 필요한 '도구' + 실행에 필요한 'JRE'

JRE는 JDK에 설치되어 있으므로 JDK만 설치하면 된다.

 

(2) JRE(Java Runtime Environment)Java 프로그램을 실행하는데 필요한 패키지프로그램을 실행만 하려면 JRE만 있어도 된다.