🦅Swift Syntax

#1. JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가 [자바]

msi 2021. 4. 14. 22:18

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

  1. JVM이란 무엇인가
  2. 컴파일 하는 방법
  3. 실행하는 방법(컴파일과 실행을 합쳐 애플리케이션을 실행시키는 과정을 '부트스트랩'이라고 부른다)
  4. 바이트코드란 무엇인가
  5. JIT 컴파일러란 무엇이며 어떻게 동작하는지
  6. JVM 구성 요소
  7. JDK와 JRE의 차이

피드백:

- 그림 직접 그려보기

- 읽은 후 닫고 이해한대로 글 직접 작성하기

- 에러 메시지 읽기

- 출처 남기기


1. JVM이란 무엇인가

컴퓨터가 자바 프로그램을 실행할 수 있게 도와주는 머신

.class파일은 그대로 두고 OS에 따라 JVM이 변경해 실행한다

 

2. 컴파일 하는 방법 (컴파일 타임)

자바소스코드~컴파일러

- 컴파일: 자바소스코드를 컴퓨터가 이해할 수 있는 기계어로 번역하는일

ex) javac Hello.java 하면 Hello.c파일이 생성된다.

ex) javac -version 하면 컴파일러 버전을 알 수 있다.

 

- IDE에서 빨간선 생길 때 컴파일 오류가 발생한 것이라고 생각할 수 있다. 

자동으로 빌드하고 있는 상황이다.

cf. 런타임 에러는 1/0과 같은 상황!!!

 

- 자바 8로 컴파일한 후, 자바 14로 실행가능한가? 가능

- 자바 14로 컴파일한 후, 자바 8로 실행가능한가? 불가능

해결방안은? 컴파일 시 옵션을 주면 된다!

javac -Source 1.5 -target 1.6

 

버전이 높아지면 성능이 향상되기 때문에

무조건 낮은 버전으로 컴파일하는 것이 답은 아니다.

스프링의 경우 컴파일이 자바8로 되어있어 최소한 자바8 이상이 되어 사용할 수 있다.

패키징이 자바9로 된 maven과 같은 라이브러리는 자바8로 사용이 불가능하다.

 

3. 실행하는 방법 (런타임)

인터프리터~기계어

1. 자바소스코드(.java)-> 2. 컴파일러(.class) -> 3. 인터프리터 -> 4. 기계어

 

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

컴파일하면 생성되는 파일

- 바이너리코드01010101은 CPU가 이해

- 바이트코드는 JVM이 이해한다.

 

바이트코드는 javap -c Hello.class로 확인 가능하다

OP코드를 보여주는데 1byte라서 2^8(256)개의 명령어를 사용할 수 있다.

 

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

인터프리터에서 기계어로 변환하는 과정에 있는 컴파일러

기계어 실행 바로 직전 해석 중 반복되는 코드를 캐싱해서 속도를 향상시키는 과정

 

6. JVM 구성요소

- classloader: JRE의 일부, 클래스의 인스턴스 생성 시 classloader를 메모리에 로드한다

- GC: 메모리 관리

- execution Engine: 메모리에 로드된 바이트코드를 실행시킨다

- runtime data area: JVM 메모리 영역

 

7. JDK와 JRE의 구성요소

JRE: 실행 환경(자바9 이후 JDK에 통합되었다, JVM, library는 여기에 들어있다)

JDK: 개발도구(컴파일 도구도 여기에! ex) java javac javap)