JVM (Java Virtual Machine)
직역하면 "자바 가상 기계", Java로 작성된 코드들을 1,0밖에 모르는 컴퓨터가 알 수있게 OS독립적으로 실행 가능하게 해주는 것이다.
JVM이 .java 파일이 컴파일 되고 실질적으로 컴퓨터가 알 수 있게 해주는 과정은 다음 포스팅을 참조 바란다.
JVM의 특징
- 컴파일된 바이트 코드를 기계가 이해할 수 있는 기계어로 변환
- Stack 기반의 가상 머신
- 메모리 관리와 Garbage Collection를 수행
JVM의 구성
JVM은 크게 아래와 같이 이루어져 있다.
- 클래스 로더(Class Loader)
- 실행 엔진(Execution Engine)
- 인터프리터(Interpreter)
- JIT 컴파일러 (Just-in-Time)
- 가비지 콜렉터(Garbage Collector)
- 런타임 데이터 영역 (Runtime Data Area)
클래스 로더
' *.java ' 파일은 컴파일 되어 ' *.class '의 바이트 코드로 전화. 이 바이트 코드는 JVM의 Class Loader로 진입한 후 링크를 통해 배치하는 작업을 수행
런타임시 동적으로 클래스를 로드하고 jar 파일 내 저장된 클래스들을 JVM 위에 탑재
즉, 클래스를 처음으로 참조할 때, 해당 클래스를 로드하고 링크하는 역할
실행 엔진
실행시키는 역할을 수행
.class 들은 기계가 바로 수행할 수 없기 때문에 실행 엔진을 통해 JVM 내부에서 실행 가능한 기계어로 변형된 후 실행
변형 되는 과정은 아래 두가지 방식을 사용
- 인터프리터- 명령어 단위로 읽어서 실행하는 인터프리터. 한 줄 씩 수행하기 때문에 느리다
- JIT 컴파일러
- "인터프리터 + 컴파일러"의 형태이다.
- 바이트코드 전체를 컴파일하여 네이티브 코드로 변경하고, 캐시에 저장. 그렇기 때문에 한 번 컴파일된 코드는 빠르게 수행
- 그러나 JIT 컴파일러의 컴파일 과정은 인터프리팅보다 오래걸리므로 JIT 컴파일러를 사용하는 JVM들은 일정 정도를 넘을 정도로 수행되는 메서드들에 대해 컴파일을 수행
Garbage Collector (포스팅 참조)
런타임 데이터 영역
런타임 시 클래스 데이터와 같은 메타 데이터와 실제 데이터가 저장되는 곳
프로그램을 수행하기 위해 OS로부터 할당받은 메모리 영역을 의미(Java 메모리 공간)
참조
https://backendcode.tistory.com/161
항해 개발자 취업 리부트 코스를 수강하고 작성한 콘텐츠 입니다.
'멋진 개발자 > Java & Spring' 카테고리의 다른 글
[항해 취업코스] 개발자 취준 기록 7 - 동시성 이슈 해결 방법 (1) | 2024.03.06 |
---|---|
[항해 취업코스] 개발자 취준 기록 6 - Java의 컴파일 과정(JVM) (0) | 2024.03.05 |
[항해 취업코스] 개발자 취준 기록 4 - JPA 더티체킹 (0) | 2024.03.05 |
[항해 취업코스] 개발자 취준 기록 3 - JPA는 무조건 좋은가 (0) | 2024.03.04 |
[항해 취업코스] 개발자 취준 기록 2 - 오버로딩, 오버라이딩 (0) | 2024.03.04 |