Java 메모리 영역
JVM and Java 컴파일 과정
◼︎ Java 메모리 영역
JVM의 전체적 구조
JVM(Java Virtual Machine)
- 자바 ↔ 운영체제 사이의 중개자 역할
- 자바가 운영체제에 구애받지 않고 실행할 수 있도록 도와줌
- Java 프로그램을 실행하면 JVM은 OS로부터 메모리를 할당
- Java 컴파일러(javac)가 자바 소스코드(.java)를 자바 바이트코드(.class)로 컴파일
- Class Loader를 통해 JVM Runtime Data Area로 로딩
- Class loader: 클래스 파일을 불러와서 메모리에 저장
- Runtime Data Area에 로딩된 .class들은 Execution Engine을 통해 해석
- 해석된 바이트 코드는 Runtime Data Area의 각 영역에 배치
- GC, 스레드 동기화 이뤄짐
Memory Area 구조
Method Area
- JVM이 실행되며 생기는 공간
- Class 정보, 전역변수 정보, Static 변수 정보가 저장되는 공간
- 모든 스레드에서 정보가 공유
스택 영역(Stack Area)
- 지역변수, 메소드의 매개변수와 같이 잠시 사용되고 필요없어지는 데이터가 저 장되는 공간 → 일시적 데이터 저장
힙 영역(Heap Area)
- new 연산자로 생성된 객체, Array와 같은 동적으로 생성된 데이터가 저장
- GC가 처리하지 않는 한 소멸되지 않는다
- Reference Type의 데이터가 저장되는 공간
- 모든 스레드에서 정보가 공유
스태틱 영역(Static Area)
- static 변수를 저장
- 스태틱 영역에 저장된 데이터는 프로그램이 종료될 때까지 유지
PC Register
- 스레드가 생성되며 생기는 공간
- 스레드가 어느 명령어를 처리하고 있는지 그 주소를 등록
- JVM이 실행하고 있는 현재의 위치를 저장하는 역할
► 클래스 로더(Class Loader)
- JVM이 Java 프로그램을 실행할 때, .class 확장자를 가진 바이트 코드 파일을 묶어서
- JVM이 OS로부터 할당받은 메모리 영역인 Runtime Data Area로 배치하는 역할
► 실행 엔진(Execution Engine)
- Class Loader에 의해 Runtime Data Area의 Method Area로 배치되는데
- 배치된 이후 JVM은 실행 엔진에 제공하여, 정의된 내용대로 바이트 코드를 실행
- 바이트 코드를 실행하는 런타임 모듈이 실행 엔진
This post is licensed under CC BY 4.0 by the author.