> 목표: 자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기
- JVM이란 무엇인가
- 컴파일 하는 방법
- 실행하는 방법(컴파일과 실행을 합쳐 애플리케이션을 실행시키는 과정을 '부트스트랩'이라고 부른다)
- 바이트코드란 무엇인가
- JIT 컴파일러란 무엇이며 어떻게 동작하는지
- JVM 구성 요소
- 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)
'🦅Swift Syntax' 카테고리의 다른 글
#2. 자바 데이터 타입, 변수 그리고 배열 [자바] (0) | 2021.04.15 |
---|---|
#1-2. LLDB(Low-Level Debugger) 디버거 [스위프트] (0) | 2021.04.15 |
#1-1. LLVM은 무엇이며 스위프트 코드는 어떻게 실행하는 것인가 [스위프트] (0) | 2021.04.14 |
어떻게 공부할 것인가?(학습방법) (0) | 2021.04.14 |