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
- 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 |
---|