안드로이드 개발 질문/답변
(글 수 45,052)
스택메모리와 힙메모리의 관계는 어떤것입니까?
스택에는 해쉬코드 가 들어가고 힙에는 데이타가 들어간다고 하던데..객체를 만든다면, 스택과 힘메모리가 동시에 만들어지고, 그 둘을 연동시키는것이 자바머신이 되는것인가요?
2010.10.29 10:58:37
아주 심플하게 설명해서, 지역 변수로 관리되는 것은 스택에, 그외 new 키워드를 통해 동적으로 할당되는 것은 힙 영역에 메모리가 할당됩니다.
스택이 어떤건지 모르신다면 자료구조 책을 들춰보시고, 스택은 그 특성상 지역변수처럼 사용할 수 있는 범위가 제한된, 즉 어느 블록 내에서만 할당되고 곧바로 지워져야 하는 스타일의 변수를 관리할 때 잘 쓰입니다. 그리고 상태를 저장하고 복구해야 되는 상황 - 함수(메서드) 호출 같은 경우에도 이용됩니다.
만일 메서드 내에서 객체를 Object A = new Object(); 처럼 생성했다면, A라는 변수는 지역 변수니까 스택에 정보가 저장됩니다. 여기서 변수 A가 갖는 값은 C 언어에서 말하는 포인터 값입니다. Java에서는 레퍼런스라고 하죠. 실제 객체 값은 스택이 아닌 힙 영역에 저장됩니다. 즉 A는 힙 영역에 대한 레퍼런스입니다. 단, A 변수 자체의 라이프 사이클은 스택에서 관리되는 거죠.
자바 VM은 그 힙 영역을 자동으로 관리하는 녀석입니다. C++에서는 힙에 메모리를 할당했으면 프로그래머가 수동으로 해제 코드를 적어줘야 했는데, Java는 힙 메모리 관리를 전부 VM에게 위임합니다.
이상이 대략적인 설명이고, 자세한 개념은 Java 관련 서적을 한번 보시는게 편할 겁니다.