W2AS2L
2023. 3. 16. 17:44
2023. 3. 16. 17:44
JVM
JVM 이란?
- 시스템 메모리를 관리하면서 자바 기반 애플리케이션을 위해 이식 가능한 실행 환경을 제공한다. 한마디로 JVM은 자바 애플리케이션을 실행하는 프로그램이다. 이를 통해 자바는 OS 에 종속되지 않고, JVM이 존재한다면 실행 가능하다. Stack 기반의 가상 머신이다.
실행과정
- 프로그램이 실행되면 JVM은 OS로부터 이 프로그램이 필요로하는 메모리를 할당받는다. JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리한다.
- 자바 컴파일러가 자바 소스코드를 읽고 바이트 코드로 변환한다.
- 변환된 바이트 코드를 클래스 로더를 통해 JVM 메모리 영역으로 로딩된다.
- 로딩된 class 파일들은 Excution Engine을 통해 해석되고
- 해석된 바이트 코드는 메모리 영역에 배치되어 실질적인 수행이 이뤄진다. 이러한 과정 속 JVM은 필요에 따라 스레드 동기화난 가비지 컬렉션 같은 메모리 관리 작업을 수행한다.
JVM 런타임 데이터 영역
모든 스레드가 공유하는 영역
- 메서드(스태틱) 영역
- 크게 두가지 영역으로 나뉠 수 있음
- 메서드의 바이트코드, static 변수가 할당된다.
- 힙 영역
- 배열과 모든 인스턴스 객체가 할당되는 영역으로 자동 초기화가 진행된다.
스레드마다 가지는 영역
- 스택 영역
- 지역변수, 매개변수가 할당되는 영역으로 초기화가 진행되지 않는다.
- PC Resisters
- 현재 실행되고 있는 주소를 저장하고 있는 영역
- Native Method Stacks
- c나 c++로 작성된 메서드를 실행할 때 사용되는 스택
- 스레드는 하나의 heap, method Area를 공유하고있다.
그러나 하나의 스레드는 다른 스레드의 내부 데이터에 접근 할 수 없다.
우리가 하나의 메서드 안에서 지역변수의 동시성 문제를 걱정하지 않아도 되는 이유가 바로 이것!