JVM (Java Virtual Machine)
직역하면 "자바 가상 기계", Java로 작성된 코드들을 1,0밖에 모르는 컴퓨터가 알 수있게 OS독립적으로 실행 가능하게 해주는 것이다.
JVM이 .java 파일이 컴파일 되고 실질적으로 컴퓨터가 알 수 있게 해주는 과정은 다음 포스팅을 참조 바란다.
[항해 취업코스] 개발자 취준 기록 3일차 - Java의 컴파일 과정(JVM)
JVM에 대해선 이전 포스팅을 참조! https://skroy0513.tistory.com/22 [항해 취업코스] 개발자 취준 기록 2일차 - JVM의 구성과 특징 JVM (Java Virtual Machine) 직역하면 "자바 가상 기계", Java로 작성된 코드들을 1,0
skroy0513.tistory.com
JVM의 특징
- 컴파일된 바이트 코드를 기계가 이해할 수 있는 기계어로 변환
- Stack 기반의 가상 머신
- 메모리 관리와 Garbage Collection를 수행
JVM의 구성
![](https://blog.kakaocdn.net/dn/rOKMt/btsFyuz3M0F/KDObXnx1DiLxntFD170Ufk/img.png)
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 (포스팅 참조)
[항해 취업코스] 개발자 취준 기록 3일차 - Garbage Collector
가비지 컬렉터란 (역할) 자바의 메모리 관리 방법 중의 하나로 JVM의 Heap 영역에서 동적으로 할당했던 메모리 영역 중 필요 없게 된 메모리 영역을 주기적으로 삭제하는 일을 한다. C나 C++에서는
skroy0513.tistory.com
런타임 데이터 영역
런타임 시 클래스 데이터와 같은 메타 데이터와 실제 데이터가 저장되는 곳
프로그램을 수행하기 위해 OS로부터 할당받은 메모리 영역을 의미(Java 메모리 공간)
참조
https://backendcode.tistory.com/161
항해 개발자 취업 리부트 코스를 수강하고 작성한 콘텐츠 입니다.
IT 커리어 성장 코스 항해99, 첫 취업부터 현직자 코스까지
항해99는 실무에 집중합니다. 최단기간에 개발자/PM으로 취업하고, 현직자 코스로 폭발 성장을 이어가세요. 실전 프로젝트, 포트폴리오 멘토링, 모의 면접까지.
hanghae99.spartacodingclub.kr
'멋진 개발자 > 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 |