본문 바로가기

STUDY REVIEW/STUDY HALLE

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

목표

자바 소스 파일(.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

블로그 참

asfirstalways.tistory.com/158

 

7. JDK와 JRE의 차이

- JDK : 자바 개발 키트

- JRE : 자바 런타임 환경

- JDK는 JRE의 상위 지합이며, JRE에 있는 모든것을 포함한다.