2장 자바 메모리구조
메모리 구조
자바의 메모리는 JVM이 프로그램 실행 에 필요한 데이터를 저장하는 영역으로 Runtime Data Area라고도 불립니다. 이 메모리 영역은 효율적인 사용을 위해 영역을 구분해 놓았는데, 크게 메소드가 호출될 때 마다 필요한 데이터가쌓이는 Stack영역과, 객체가 생성될 때마다 생성된 객체를 보관하는 Heap영역, 정적 변수와 클래스레벨의 정보를 저장하는 Static(Method)영역이 존재합니다. 그 외 몇 가지 영역이 더 존재하지만 생략하겠습니다.
1. Stack 영역
메소드에서 선언된 변수들의 정보가 저장되는 메모리 영역입니다.
Stack은 LIFO구조를 가지고 있습니다.
멀티 쓰레드 환경에서 각 쓰레드는 고유한 Stack 영역을 가지고 있습니다.
2. Heap 영역
객체나, 배열을 새롭게(new) 생성하게 되면 생성된 객체를 보관하는 영역
Gabage Collector가 관리 하는 영역으로 사용하지 않는(참조되지 않는) 객체의 정보는 소멸됩니다.
멀티 쓰레드 완경에서 각 쓰레드가 공유해서 사용하는 데이터 영역입니다.
3. Static(Method)영역
정적인(Static)데이터를 보관하는 영역입니다.
Static변수, 메서드, 바이트 코드등을 보관합니다.
Static영역에 할당된 데이터는 프로그램이 종료되거나 명시적으로 데이터를 제거하지 않으면 소멸되지 않습니다.
멀티 쓰레드 완경에서 각 쓰레드가 공유해서 사용하는 데이터 영역입니다.
4. 그 외
JVM에는 위에서 설명한 메모리영역을 제외하고도 현재 실행중인 스레드의 주소를 저장하는 레지스터, 자바 외 언어로 작성된(C++ 같은) 네이티브 코드를 실행하기 위한 네이티브 메서드 스택 영역, 상수값들을 저장하기 위한 상수 풀 등이 존재합니다.
Last updated