1. Class Loader : 클래스 파일을 로드하는 데 사용되는 하위 시스템이다.
2. Method Area : JVM Method Area 는 메타 데이터, 상수 런타임 풀, 메서드에 대한 코드와 같은 클래스 구조를 저장한다. 공유자원 ( 여기서 공유자원이라는 의미는 다른 스레드에서도 활용 가능한 자원을 말함) 이다.
3. Heap : 모든 객체, 관련 인스턴스 변수 및 배열은 Heap 에 저장된다. 이 메모리는 여러 스레드에 걸쳐 공유된다.
4. JVM Language Stack : Java Language Stacks 는 로컬 변수를 저장하고 부분적인 결과를 얻는다. 각 스레드에는 자체 JVM 스택이 있으며, 스레드가 생성될 때 동시에 생성된다.
메서드를 호출할 때마다 새 프레임이 생성되고, 메서드 호출 프로세스가 완료되면 삭제된다.
스택은 공유자원이 아니므로 스레드 세이프(여러 스레드에서 공유 자원을 접근할 때 생길 수 있는 문제)하다.
내부에는 Local Variable Array, Operand Stack, Frame Data 의 영역이 있다.
5. PC Register : PC 레지스터는 현재 실행중인 Java 가상 시스템 명령의 주소를 저장한다. 자바에서는 각 스레드에 별도의 PC 레지스터가 있다.
6. Native Method Stack : Native 라이브러리에 따라 네이티브 코드 명령을 보관한다. 자바 대신 다른 언어로 쓰여 있다.
7. Execution Engine : Runtime 데이터 영역에 할당 된 바이트코드는 실행 엔진에 의해 실행된다. 실행 엔진은 바이트 코드를 읽고 조각 별로 실행한다.
8. Native Method Interface : Native Method Interface는 프로그래밍 프레임워크다. JVM에서 실행 중인 Java 코드가 Library 및 native application 으로 호출할 수 있도록 한다.
9. Native Method Libraries : Native Libraries 는 실행 엔진에 필요한 Native Libraries(C, C++)의 모음이다.
blog.naver.com/hsm622/222138523668
JVM 은 크게 네 가지로 구성 요소를 가진다.
1. Class Loader
2. GC (Garbage Collector)
3. Execution Engine
4. Runtime Data Area
1. Class Loader
JRE에 일부로, 바이트 코드를 실행할 때 Class 객체를 메모리에 생성하는 요소이다.
클래스의 인스턴스를 생성하면 Class Loader 를 통해 메모리에 로드한다.
2. GC ( Garbage Collector )
자바는 메모리 관리를 사용자가 아닌 JVM이 알아서 해준다.
GC는 더 이상 참조되지 않는 메모리를 정리해준다. GC가 언제 호출되는지는 알 수 없으며, 심지어 사용자가 호출하더라도 메모리 정리할 필요가 없다고 판단하면 실행하지 않는다.
3. Execution Engine
메모리에 로드 된 바이트 코드를 실행하는 역할을 한다.
Class Loader 를 통해 Runtime Data Area 에 배치된 바이트 코드는 Execution Engine에 의해 실행 된다. Interpreter 방식이나 JIT 방식으로 실행한다.
4. Runtime Data Area
JVM의 메모리 영역이다.
크게 네가지 영역으로 구분할 수 있다.
a 클래스 영역
> 실행에 필요한 클래스들을 로드하여 저장한다. 내부에서 메소드 영역과 상수 영역으로 또 나뉘어 저장된다.
b. 가비지 컬렉션 Heap 영역
> GC에 의해 관리되는 영역이다. 동적 메모리 할당 영역 이라고도 하며, 소스상에서 new 연산자로 객체를 만들어 때 할당되는 영역이다.
c. 런타임 스택 영역
> 프로그램 실행 중 발생하는 메소드 호출과 복귀에 대한 정보를 저장한다.
d. 네이티브 스택 영역
> 자바에는 하드웨어를 직접 제어하는 기능이 없기 때문에, 필요할 경우 C 언어와 같은 다른 언어의 기능을 빌려 사용한다. 이때 사용하는 기술이 JNI ( Java Native Interface ) 기술로 네이티브 메소드들이 바이트 코드로 변환 되면서 사용되고 기록하는 영역이다.
'Live-Study' 카테고리의 다른 글
2주차 : Java 데이터 타입, 변수 그리고 배열 (0) | 2021.03.07 |
---|---|
1주차 : JDK 와 JRE 차이 (0) | 2021.02.28 |
1주차 : JIT 컴파일러란 무엇이며 어떻게 동작하는지 (0) | 2021.02.28 |
1주차 : Byte Code 란 무엇인가 ? (0) | 2021.02.28 |
1주차 : 실행하는 방법 ( JVM 실행 방법 ) (0) | 2021.02.23 |