[Java] JVM 이란 무엇인가?

728x90
반응형
SMALL

 

# JVM

Java Virtual Machine

 

 

자바 가상 머신으로 자바 바이트 코드를 실행할 수 있는 주체이다.

 

CPU, OS와 무관하게 실행 가능하다.

즉, 운영체제 위에서 동작하는 프로세스로 자바 코드를 컴파일해서 얻은 바이트 코드를

해당 운영체제가 이해할 수 있는 기계어로 바꿔 실행시켜주는 역할을 한다.

 


 

## 구성

  • Class Loader
    • 자바에서 소스를 작성하면 .java 파일이 생성된다.
    • .java 파일을 컴파일러가 컴파일하면 .class(바이트코드)파일이 생성된다.
    • 이렇게 생성된 .class 파일들을 엮어서 JVM이 운영체제로부터 할당받은 메모리 영역인
    • Runtime Data Area로 적재하는 역할을 한다.

 

  • Execution Engine
    • Class Loader에 의해 메모리에 적재된 class들을 기계어로 번경해 명령어 단위로 실행하는 역할을 한다.
    • 명령어를 하나하나 실행하는 인터프리터 방식과 JIT(Just-In Time) 방식이 있다.
    • JIT 컴파일러는 적절한 시간에 전체 바이트 코드를 네이티브 코드로 변경해서 Execution Engine가 실행한다.

 

  • Garbage Collector
    • Heap 메모리 영역에 생성된 객체들 중에 참조되지 않는 객체들을 탐색하여 제거한다.

https://hoooon-s.tistory.com/78?category=1069857 

 

[Garbage Collector] GC란 무엇인가?

Garbage Collector 정리되지 않은 메모리, 유효하지 않은 메모리 주소, 주소를 잃어버려 사용할 수 없는 메모리 등의 가비지를 메모리에서 해제시켜 다른 용도로 사용할 수 있게 해주는 프로그램 Stop

hoooon-s.tistory.com

 

 

  • Runtime Data Area
    • JVM의 메모리 영역으로 Java Application을 실행할 때 사용되는 데이터들을 적재한다.
    • Runtime Data Area는 Method Area, Heap Area, Stack Area, PC Register, Native Method Stack으로 구분된다.

 

 


 

### Runtime Data Area

  • Method Area (Static Area)
    • Class Area라고도 불린다.
    • static 키워드를 붙여서 선언된 필드와 메서드인 '클래스 멤버'가 올라간다.
    • static 영역에 있는 것은 어떤 곳에서나 접근이 가능하기에 '전역'이라는 키워드를 사용한다.
    • 그러므로 static 변수는 읽기 전용이 아닌 경우에는 사용하지 않아야 한다.
    • static 영역에 올라가면 JVM이 종료될 때까지 사라지지 않고 고정된 상태로 유지된다.

 

  • Heap Area
    • 생성된 인스턴스(객체), 인스턴스 필드가 올라간다.
    • static 한 메서드에서는 인스턴스 필드에 접근할 수 없다. static 시점에 해당 인스턴스 필드가 존재하지 않을 수 있어서..
    • 어떤 참조 변수도 Heap 영역에 있는 인스턴스를 참조하지 않게 된다면, OG에 의해 메모리에서 제거된다.

 

  • Stack Area
    • 중괄호 '{' 를 만나면 Stack Frame이 생성되고, '}' 를 만나면 Stack Frame이 사라진다.
    • 즉, 소스 상에서 중괄호 내부에 선언된 지역 변수는 stack area에 올라간다.
    • Value Type(Primitive Type)의 변수 값들, Reference Type의 참조 값들이 저장 된다.

 

  • PC Register
    • Thread가 생성될 때마다 생성되는 영역으로 Program Counter
    • 즉, 현재 Thread가 실행되고 있는 부분의 주소와 명령어를 저장하고 있는 영역이다.
    • 이것을 이용하여 Thread가 돌아가면서 수행된다.

 

  • Native Method Stack
    • Java 외 언어로 작성된 네이티브 코드를 위한 영역이다.

 

Thread 생성 시 Method, Heap 영역은 모든 Thread가 공유한다.
하지만, Stack, PC Register, Native Method Stack은 각 Thread 마다 생성되고 공유하지 않는다. 

 

 

 

 

 

 


참고

728x90
반응형
LIST

'Develope > Java' 카테고리의 다른 글

[Garbage Collector] GC란 무엇인가?  (0) 2021.01.28