[Java] JVM

[Java] JVM

728x90

JVM : Java Virtual Machine

JVM = Class Loader + Garbage Collector + Runtime Data Area + Execute Engine

1. Class Loader

- 컴파일러에 의해 .java 파일을 .class 파일 ( Byte Code )로 생성

- .class 파일들을 모아 Runtime Data Area 형태로 메모리에 적재

2. Runtime Data Area

1) Method Area

- JVM이 시작할 때 생성되고, 모든 스레드들이 공유하는 영역

- 클래스 멤버 변수, 메소드 정보, Class/Interface 정보, static, final 변수 등

2) Heap Area

- 동적으로 생성된 객체와 배열이 저장되는 영역 , Garbage Collection의 대상

3) Stack Area

- 지역 변수, 매개 변수 등 / Stack은 Thread 별로 독자적으로 생성

* 객체 생성 시 실제 객체는 Heap에 할당 , 해당 Reference만 Stack에 저장

int[] scores = {10, 20, 30};

4) PC Register

- 현재의 Thread가 실행되는 부분의 주소와 명령을 저장

- 현재 명령이 끝난 뒤에 값을 증가 , 해당하는 값의 명령을 실행

5) Native Method Stacks

- Java 이외의 언어로 작성된 코드를 실행할 때 Native Method Stack이 할당

3. Execution Engine

- Memory에 적재된 클래스들을 기계어로 변경하여 명령어 단위로 실행하는 역할

* Interpreter 방식 : 명령어를 하나 하나 실행하는 방식

* JIT 방식 : 실행 시 자주 쓸만한 코드들을 기계어로 변환 시켜 저장해두는 방식

4. Garbage Collector

- 정리되지 않는 메모리, 유효하지 않은 메모리 주소, 사용할 수 없는 메모리 정리

- Heap Memory 영역에 생성 된 객체들 중 쓸모 없는 객체 탐색 후 제거

-> Garbabe를 판별하기 위해 Reachability라는 개념을 사용

유효한 참조가 있으면 'reachable' , 그렇지 않으면 'unreachable'로 구분

- C++과 같은 다른 언어에서는 객체의 메모리를 직접 해제 해주어야 한다

728x90

from http://newbie-block.tistory.com/55 by ccl(A) rewrite - 2021-09-29 16:27:08