JVM 은 Java Virtual Machine 의 약자로,
자바를 동작하게 해주는 소프트웨어 이다.
(겪어 보지 못한) 다른 이전 언어들은
OS 마다 개발을 달리 해줘야 했다고 한다.
그러나 Java 언어 창시자는 OS 마다 개발하기 귀찮았던건지
아주 편리하게 OS 에 상관없이 개발할 수 있게 만들어 줬다.
그 역할이 JVM 이 하는 가장 큰 역할이라고 생각한다.
JVM 을 살펴보겠다.
JVM 은 클래스 파일을 읽는다.
Class Loader 는 클래스 파일을 가져오는 역할을 한다.
Execution Engine 은 가져온 클래스 파일을 번역하는 역할을 한다.
Runtime Data Areas 는 코드를 진행하여 OS 에 명령을 내리는 역할을 한다.
한 단계 더 들어가 보겠다.
Execution Engine 은
Interpreter, JIT Compiler 두 방식으로 나눌 수 있다.
Class Loader 가 가져온 클래스 파일( 바이트 코드 )을
기계어로 번역하며 실행하는 Interpreter -> 빠르다.
모아서 한번에 번역하고 캐시로 저장했다가 사용하는 JIT Compiler -> 컴파일 시간이 필요하지만 캐시가 유용함.
이 두 방식을 사용하여 기계어로 번역한다.
Runtime Data Areas 는
PC Register, Stack, Native Method Stack, Heap, Method Area 로 나뉜다.
PC Register 는 진행 중인 스레드를 제어한다.
Native Method Stack 은 Java 코드가 아닌 Native 코드를 저장한다.
Stack 은 임시로 생성되는 주소, 참조타입이 아닌 원시타입의 값을 저장한다.
이 위의 세 부분은 스레드마다 생성된다.
Heap 은 참조타입 값을 저장한다. ( 참조 값은 Stack 에 저장 )
Method Area 는 데이터의 타입, 생성자, 메서드, 필드 등의 값을 저장한다.
이 두 부분은 스레드가 공유한다.
1. Java 언어로 코드를 작성한다.
2. javac.exe 가 컴파일 하여 .class (바이트코드) 로 변환한다.
3. class loader 가 .class 파일을 가져온다.
4. execution engine 에서 interpret 방식 또는 JIT Compile 방식을 통하여 기계어로 해석한다.
5. 해석된 데이터를 Runtime Data Areas 에서 분류하여 나눠 갖는다.
'학습 > 이해하고 쓰는 작동원리' 카테고리의 다른 글
가비지 컬렉션 작동 원리 (0) | 2021.08.02 |
---|---|
웹 서비스 작동원리 (0) | 2021.07.19 |