-
[JAVA] 자바, 메모리 구조 스택(stack), 힙(heap), 데이터(data)JAVA 2020. 6. 21. 13:51
자바, 메모리 구조 스택(stack), 힙(heap), 데이터(data)
스택(stack) 영역
메모리의 스택(stack) 영역은 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역입니다.
스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸합니다.
이렇게 스택 영역에 저장되는 함수의 호출 정보를 스택 프레임(stack frame)이라고 합니다.
스택 영역은 푸시(push) 동작으로 데이터를 저장하고, 팝(pop) 동작으로 데이터를 인출합니다.
이러한 스택은 후입선출(LIFO, Last-In First-Out) 방식에 따라 동작하므로, 가장 늦게 저장된 데이터가 가장 먼저 인출됩니다.
스택 영역은 메모리의 높은 주소에서 낮은 주소의 방향으로 할당됩니다.
힙(heap)영역
메모리의 힙(heap) 영역은 사용자가 직접 관리할 수 있는 '그리고 해야만 하는' 메모리 영역입니다.
보통 힙 영역은 사용자에 의해 메모리 공간이 동적으로 할당되고 해제됩니다.
그러나, 자바에서는 가비지 컬렉터에 의해 수거되면 메모리에서 사라집니다.
클래스가 생성될 때 힙(heap) 메모리에 생성됩니다. (ex 클래스의 멤버변수)
힙 영역은 메모리의 낮은 주소에서 높은 주소의 방향으로 할당됩니다.
데이터(data) 영역
데이터 영역에는 상수나 문자열, static 변수가 저장되는 영역입니다.
인스턴스 변수는 객체가 생성되는 문장 즉 new가 되어야 합니다.
하지만, static 변수는 클래스 생성과 상관 없이 처음부터 데이터 영역 메모리에 생성됩니다.
데이터 영역은 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸합니다.
References
잘못된 코드나 내용이 있다면 댓글을 남겨주세요. 즉시 수정하도록 하겠습니다! :)
'JAVA' 카테고리의 다른 글
[JAVA] 상속에서 클래스 생성과 super (0) 2020.06.23 [JAVA] 자바, ArrayList (0) 2020.06.22 [JAVA] 자바, 배열 복사 (0) 2020.06.22 [JAVA] 자바, 정보 은닉 (0) 2020.06.20 [자바] 문자열(String)비교 == 와 equals 차이점 (0) 2020.03.22