메모리 구조
컴퓨터는 다양한 데이터를 저장하고 처리하기 위한 메모리를 가지고 있습니다. 이 메모리는 주로 세 가지 영역으로 나눌 수 있습니다. 이 영역은 메소드(Method) 영역, 스택(Stack) 영역, 힙(Heap) 영역으로 구성되어 있습니다.
메소드 (Method) 영역
메소드 영역은 클래스 실행 시 사용되는 클래스 변수(정적 변수)와 클래스 메소드(정적 메소드)를 저장하는 공간입니다. 메소드 영역은 JVM(Java Virtual Machine)이 시작될 때 생성되며, JVM이 종료될 때까지 유지됩니다. 클래스 파일의 바이트 코드들이 이 영역에 저장되어 JVM에 의해 사용될 수 있습니다.
스택 (Stack) 영역
스택 영역은 메소드가 호출될 때마다 생성되는 지역 변수와 임시 데이터를 저장하는 공간입니다. 메소드가 호출될 때마다 크기가 변하는 스택 프레임(Stack Frame)이라는 작은 공간이 생성됩니다. 이 스택 프레임은 메소드가 실행되는 동안 해당 메소드에서 사용되는 변수들을 저장하고, 메소드의 실행이 끝나면 스택 프레임도 함께 사라집니다.
스택 영역은 데이터를 추가하고 제거하는 작업이 빠르고 간단한 대신 크기가 작아 제한적인 용도로 사용됩니다. 또한, 스택 영역은 후입선출(LIFO, Last-In-First-Out) 방식으로 동작하므로, 가장 최근에 추가된 데이터가 가장 먼저 제거됩니다.
힙 (Heap) 영역
힙 영역은 동적으로 생성된 객체들을 저장하는 공간입니다. 인스턴스 변수(멤버 변수)와 객체 그 자체가 이 공간에 저장됩니다. 힙 영역은 JVM에 의해 관리되며, Garbage Collector(GC)에 의해 더 이상 사용되지 않는 객체들이 자동으로 해제됩니다.
힙 영역은 다른 영역과 달리 크기가 동적으로 변하며, 프로그래머가 직접 크기를 제어할 수 없습니다. 힙 영역은 객체를 생성하기 위해 new
키워드로 생성되는 곳으로, 메모리 누수와 같은 문제가 발생할 수 있어 주의가 필요합니다.
댓글