Live-Study

1주차 : JVM 구성 요소

WOOKTAE 2021. 2. 28. 17:01

https://gblee1987.tistory.com/173

 

 

 

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 ) 기술로 네이티브 메소드들이 바이트 코드로 변환 되면서 사용되고 기록하는 영역이다.