메모리
업데이트:
메모리 구조Permalink
- JVM
- Runtime data Aarea(실행 데이터 영역)으로 불리며 여러 영역으로 분리된다.
- JVM Runtime
- 프로그램 실행시 JVM은 OS로부터 메모리를 할당
- 자바 컴파일러(javac)가 자바소스코드(.java)를 자바 바이트 코드(.class)로 컴파일
- Class Loader를 통해 JVM Runtime data Area로 로딩
- 로더에 의하여 로딩 된 .class들은 Excution Engine(실행 엔진)을 통해 Interpret(해석)
- 해석된 바이트 코드는 Runtime Data Area 각 영역에 배치되어 수행
- 위 과정중에 Excution Engine에 의해 GC의 작동과 쓰레드 동기화가 이루어짐
Runtime Data Area 영역Permalink
- Method Area
- JVM에서 읽어온 클래스와 인터페이스 정보가 저장
- 클래스의 인스턴스가 생성된 후 메소드 실행 시 모든 정보가 저장됨
- Runtime Constant Pool : 각 클래스, 인터페이스 상수, 메서드 필드와 모든 레퍼런스가 담겨 있음
- Heap
- 동적 데이터가 할당되어 저장, GC 동작 대상 오랜 시간 참조가 없는 객체들은 GC를 통해 제거
- JVM Language Stacks
- 지역변수, 파라미터, 메소드 정보, 임시 데이터가 저장
- JVM은 스택 프레임을 Push/Pop하는 연산만 수행
- printStackTrace()를 통해 Stack trace로 각 스택 프레임을 출력
- PC Registers
- 스레드가 시작될떄생성
- 스레드의 명령어실행을 기록, JVM의 명령어 주소를 가짐
- Native Method Area
- 바이트 코드가 아닌 바이너리 코드 실행 영역을 통해 호출되는 C/C++의 코드를 실행하는 영역
- Exception Engine(실행 엔진)
- Class Loader에 의해 로드 된 클래스의 바이트 코드를 실행하는 모듈
- Byte Code -> Binary Code
- interpreter : 명령어를 하나씩 실행하는 대화형 컴파일
- JIT(Just-In-Time) : 인터프리터의 느린속도를 보안하기 위한 컴파일러로 정해진 시간 내에 모든 바이트 코드를 컴파일
- Stack space
- 정적 메모리 할당이 이루어지는 장소로 힙 영역에 동적 할당된 값들(Object)에 대한 참조를 얻을 수 있다.
- JVM의 각 스레드는 스택 프레임을 가지며 각 메소드 혹은 변수마다 스택 프레임을 추가하고, 해제시 스택 프레임은 빠지게 된다.
- Heap space
- 런타임 시간에 Object와 JRE 클래스에 대한 할당에 사용된다.
- 객체의 위치를 우리가 알 수 없으며 참조를 Stack에게 반환한다.
GC(Garbage Collection)Permalink
- stap the world
- GC를 실행하기 위하여 JVM이 모든 애플리케이션의 실행을 멈추는 것이다.
- GC를 실행하는 쓰레드 이외에 모든 쓰레드는 멈춘다
댓글남기기