목표
자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기.
학습할 것
- JVM이란 무엇인가
- 컴파일 하는 방법
- 실행하는 방법
- 바이트코드란 무엇인가
- JIT 컴파일러란 무엇이며 어떻게 동작하는지
- JVM 구성 요소
- JDK와 JRE의 차이
1. JVM이란 무엇인가
- Java Virtual Machine의 약자를 따서 자바 가상 머신을 줄여 부르는 용어이다.
- 자바바이트코드를 OS에 맞게 변환해준다.
여기서 가상 머신이란 프로그램을 실행하기 위해 소프트웨어로 물리적 머신과 유사한 머신을 구현한 것이다.
2. 컴파일 하는 방법
- 메모장으로 .java 파일 생성
- cmd 커멘드로 해당 폴더까지 접근
- javac 패키지명 컴파일할 java 파일 입력
3. 실행하는 방법
- java(실행명령어) 패키지명/컴파일된 파일명 입력
4. 바이트코드란 무엇인가
- 바이트코드(bytecode, portable code, p-code)는 특정 하드웨어가 아닌 가상 컴퓨터에서 돌아가는 실행 프로그램을 위한 이진 표현법이다.
바이트코드라 불리게 된 이유는, 대부분이 1바이트 크기의 명령코드였기 때문에 바이트코드라 불리게 되었다.
+자바 바이트코드
- Java bytecode란 자바 가상 머신이 이해할 수 있는 언어로 변환된 자바 소스코드를 의미한다.
- 자바 바이트코드의 확장자는 .class이다.
- 자바 바이트코드는 자바 가상 머신만 설치되어 있다면, 어떤 운영체제에서도 실행할 수 있다.
5. JIT 컴파일러란 무엇이며 어떻게 동작하는지
- just-in-time 의 약자이다.
- JIT 컴파일 또는 동적번역(Dynamic Translation)이라 불린다.
- 프로그램을 실제 실행하는 시점에서 기계어로 번역하는 컴파일 기법이다.
컴퓨터 프로그램 만드는 방법
1. 인터프리트 방식 : 실행 중 프로그램 코드를 읽어가면서 해당 기능에 대응하는 기계어 코드를 실행한다.
2. 정적컴파일 방식 : 실행하기 전에 프로그램 코드를 기계어로 번역한다.
- JIT 컴파일러는 위의 방식을 혼합한 방식으로 생각할 수 있다.
- JIT 컴파일러는 바이트코드를 읽어 빠른 속도로 기계어를 생성할 수 있다. 이런 기계어 변환은 코드가 실행되는 과정에 실시간으로 일어나며(그래서 Just-In-Time이다), 전체 코드의 필요한 부분만 변환한다. 기계어로 변환된 코드는 캐시에 저장되기 때문에 재사용시 컴파일을 다시 할 필요가 없다.
위키백과 참조
ko.wikipedia.org/wiki/JIT_%EC%BB%B4%ED%8C%8C%EC%9D%BC
6. JVM 구성 요소
Java Source Code(.java file) >> (Java Compiler(javac)) >> Java Byte Code(.class file) >> JVM
JVM
- Class Loader(클래스 로더) : JVM내의 클래스(.class파일)를 로드하고, 런타임 데이터 영역에 배치하는 작업을 수행하는 모듈
Class Loader(클래스 로더) |
Loading |
Linking |
Initialization |
- Execution(실행 엔진) : 클래스 로더가 배치한 작업이 실행 엔진에 의해 실행된다.
Execution(실행 엔진) |
Interpreter |
JIT Compiler |
Garbage Collector |
- Runtime Data Area : 프로그램 수행을 위해 OS에서 할당받은 메모리 공간
Thread 1 | Thread 2 | Thread 3 |
PC Register | PC Register | PC Register |
JVM Stack | JVM Stack | JVM Stack |
Native Method Stack | Native Method Stack | Native Method Stack |
Heap | ||
New/Young Generation |
Tenured Generation |
Permanent Gereration |
Method Area |
Runtime Constant Pool |
블로그 참조
7. JDK와 JRE의 차이
- JDK : 자바 개발 키트
- JRE : 자바 런타임 환경
- JDK는 JRE의 상위 지합이며, JRE에 있는 모든것을 포함한다.
'STUDY REVIEW > STUDY HALLE' 카테고리의 다른 글
3주차 과제: 연산자 (2) | 2020.11.27 |
---|---|
2주차 과제: 자바 데이터 타입, 변수 그리고 배열 (0) | 2020.11.24 |