목표
자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기.
학습할 것
- JVM이란 무엇인가
- 컴파일 하는 방법
- 실행하는 방법
- 바이트코드란 무엇인가
- JIT 컴파일러란 무엇이며 어떻게 동작하는지
- JVM 구성 요소
- JDK와 JRE의 차이
1. JVM이란 무엇인가
1.1 JAVA, JVM, JRE, JDK의 차이
위 네가지의 관계는 아래 그림으로 표현할 수 있다.
# 자바
- 프로그래밍 언어
- JDK에 들어있는 자바 컴파일러(javac)를 사용하여 바이트 코드(.class 파일)을 만들 수 있다
# JVM (Java Virtual Machine, 자바 가상머신)
- 자바 바이트 코드(.class 파일)을 OS(예. Linux, Window)에 특화된 기계어로 변경한다.
- JVM은 다양한 밴더에 의해 제공된다. (예. 오라클, 아마존..)
- 자바뿐만 아니라 다양한 JVM언어(예. Kotlin, Scala, Jython.)이 존재.
- GC(Garbage Collection)의 역할도 함
-> C에서는 메모리 해제 직접 해줘야했음.
# JRE (Java Runtime Enviroment)
- JRE = JVM + 라이브러리 + 자바 런타임에서 사용되는 리소스,프로퍼티세팅
- 자바 애플리케이션을 실행할 수 있는 환경
# JDK (Java Development Kit)
- JRE + 개발에 필요한 모든 툴 (예.javac)
2. 컴파일 하는 방법
a. java 파일을 만든다
b. javac를 이용해 .claa 파일로 컴파일
c. javap를 이용하여 디컴파일. 결과물 확인
3. 실행하는 법
터미널창에서 java (예제파일이름).class 을 입력하면, JVM이 class의 바이트코드를 읽고 실행한다.
**주의 .class 확장자명은 입력하지 말것. (Could not find class 에러 발생함)
4. 바이트 코드란
- OS에 무관하게, JVM만 설치되어있다면 실행 가능.
- 코드는 (1) 소스코드 -> (2)바이트코드 -> (3)기계어(예.010101) 의 순으로 번역된다.
- 바이트코드의 명령어 크기는 1바이트. 따라서 바이트 코드라 불린다.
5. JIT ( Just In Time) 컴파일러
바이트 코드에서 기계어로 바꾸는 방법은 두가지가 있다.
(1) 컴파일 방식: 시작단계에서 소스코드를 모두 기계어(native language)로 변환 -> 빌드 때 느리다
(2) 인터프리터 방식: 빌드시 작업 없다. 대신 런타임에서 한줄씩 읽는다. -> 런타임때 느리다
JAVA는 이 두가지 방식을 모두 사용. 이에 따라 JIT 컴파일러를 도입했다.
JIT 컴파일러는 인터프리터가 반복해서 읽어야할 코드는 저장소에 미리 번역하여 저장해둔다.
아래의 동작 방법을 참고하자.
참고: https://catch-me-java.tistory.com/11?category=438116
5. JVM 구성 요소
-> 작성 예정
6. JDK와 JRE의 차이
-> 작성 예정
'개발 > 자바' 카테고리의 다른 글
gradle의 세팅, project structure을 왜 안 따라갈까. (0) | 2021.09.05 |
---|---|
객체를 정렬할 때-> comparable을 사용하자. (작성필요) (0) | 2021.08.26 |
[자바웹프로그래밍 NextStep.7장]DB를 활용해 데이터를 영구적으로 저장하기 (0) | 2021.08.02 |
9주차: 예외처리 (0) | 2021.07.04 |
6주차 과제: 상속 (0) | 2021.07.03 |