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