📌 JVM이란 무엇인가
- JVM : Java Virtual Machine
- 자바를 실행하기 위한 가상 기계(컴퓨터)
- OS 별로 존재한다.
- 바이너리 코드를 읽고 검증하고 실행한다.
- JVM은 자바 외의 다른 언어에서도 사용 가능하다.
- 실행 시점에 그때그때 기계어로 통번역하는 방식(JIT 방식)
*OS(운영체제)마다 다른 컴파일러가 필요하지만 자바는 JVM이 0과 1을(바이트코드) OS에 맞게 번역해준다.
📌바이트코드란 무엇인가
- 가상 컴퓨터(VM)에서 돌아가는 실행 프로그램을 위한 이진 표현법(0과 1로 이루어짐)
- 자바 바이트 코드(Java bytecode)는 JVM이 이해할 수 있는 언어로 변환된 자바 소스코드를 의미
* 코드 변환 과정 : 자바 소스코드(.java) → 바이트코드(.class) → 기계어
📌컴파일 및 실행 방법
1. 컴파일 방법
- 자바 소스 파일(.java) 작성
- 자바 컴파일러(javac.exe) 사용하여 소스 파일(.java) 컴파일
- 클래스파일(.class) 생성
2. 실행 방법
- 자바 인터프리터(java.exe)로 클래스파일(.class) 실행
* 컴파일 시에는 확장자명 붙이고, 실행할 때는 클래스 파일 제목만 쓴다.
📌JIT 컴파일러란 무엇이며 어떻게 동작하는지
- JIT 컴파일(just-in-time compliation) 또는 동적 번역(dynamic translation) 이라고 한다.
- JIT 컴파일러는 JRE안에 있으며, 프로그램을 실제 실행하는 시점에 그때그때 기계어로 통번역하는 컴파일러
- 인터프리터 방식의 단점인 실행 속도를 개선하기 위한 컴파일 방법이다.
* 인터프리터 방식 : 클래스 파일(바이트 코드)을 한줄씩 읽고 해석하는 방법
- 실행 전에 미리 JIT 컴파일러로 반복되는 코드를 Native code로 바꿔놓고 이후 인터프리터가 컴파일된 네이티브 코드를 바로 사용해 인터프리터의 느린 속도를 개선한다.
단점이라면 JIT 컴파일러가 컴파일하는 과정은 바이트코드를 하나씩 인터프리팅하는 것보다 훨씬 오래 걸리므로
초기 실행 속도와 메모리 사용량에서 손해를 보는 단점도 있다.
따라서, JIT 컴파일러를 사용하는 JVM들은 내부적으로 해당 메서드가 얼마나 자주 수행되는지 체크하고, 일정 정도를 넘을 때에만 컴파일을 수행한다.
📌JVM 구성 요소
- JVM은 크게 4가지로 구분 됨
1. Class Loader
2. Execution Engine
- Class Loader를 통해 JVM 내의 Runtime Data Areas에 배치된 바이트코드를 명령어 단위로 읽어서 실행한다.
3. Runtime Data Area
- JVM이 프로세스로써 수행되기 위해 OS로부터 할당받는 메모리 영역
- 목적에 따라 크게 5가지 블럭으로 나눔
- 메소드 영역 : 클래스 수준의 정보 (클래스 이름, 부모 클래스 이름, 메소드, 변수) 저장.
- 힙 영역 : 객체를 저장한다. 인스턴스들이 다 힙에 저장된다.
- 스택 영역 : 메소드가 호출될 때마다 스택 프레임이라 불리는 블럭이 하나씩 생성되고 메소드 실행이 완료되면 삭제된다.
- PC 영역 : 쓰레드 내 현재 실행할 스택 프레임을 가리키는 포인터가 생성된다.
- 네이티브 메소드 영역 : 다른 언어(C, C++)의 메소드 호출을 위해 할당되는 구역, 언어에 맞게 Stack이 생성된다.
- 메소드 영역, 힙 영역 : 여기에 저장된 정보들은 모든 Thread 공유
- 스택 영역, PC 영역, 네이티브 메소드 영역 : 쓰레드 마다 생성되어 저장된 정보를 공유하지 않는다.
4-1. JNI(Java Native Interface)
- 자바 애플리케이션에서 C, C++, 어셈블리로 작성된 Native 키워드를 사용한 함수를 사용할 수 있는 방법 제공
4-2. 네이티브 메소드 라이브러리
- C, C++로 작성 된 라이브러리
📌JDK와 JRE의 차이
1. JRE
- 자바 실행 환경의 약자(Java Runtime Environment)
- JRE = JVM + 자바 프로그램 실행에 필요한 라이브러리 파일 등(ex. 스캐너)
- JVM의 실행환경을 구현
- 자바 프로그램을 실행할 수 있게 하는 도구
2. JDK
- 자바 개발 도구의 약자(Java Development Kit)
- JDK = JRE + 개발을 위한 도구(ex. 컴파일러, 디버그 도구 등)
- 자바 프로그램을 실행, 컴파일, 개발할 수 있게 하는 도구
*
[참고]
- https://www.youtube.com/watch?v=f0cAmTYo4tQ
- https://www.youtube.com/watch?v=zta7kVTVkuk&t=885s
- https://github.com/Chohongjae/javaStudy/blob/main/live-study/week1.md
'스터디 > 2209_자바의정석' 카테고리의 다른 글
6주차 과제 : 상속 (0) | 2022.09.29 |
---|---|
5주차 과제 : 클래스 (0) | 2022.09.26 |
4주차 과제 : 제어문 (0) | 2022.09.18 |
3주차 과제 : 연산자 (0) | 2022.09.18 |
2주차 과제 : 자바 데이터 타입, 변수 그리고 배열 (0) | 2022.09.15 |
댓글