인프런 커뮤니티 질문&답변

홍태경님의 프로필 이미지
홍태경

작성한 질문수

김영한의 실전 자바 - 기본편

자바 메모리 구조

맴버 변수와 스택 영역 관계

작성

·

158

0

 학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.


1. 강의 내용과 관련된 질문을 남겨주세요.
2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.
(자주 하는 질문 링크: https://bit.ly/3fX6ygx)
3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.
(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)

질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.
=========================================
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]
맴버 메소드 호출은 은 힙 영역에 생성되지 않고 메소드 영역에서 참조 후 그걸 main 함수에서 불러올 시 스택 영역에 해당 메소드가 쌓이는걸로 이해 했습니다 그럼 힙 영역에 생성되는 맴버 변수의 경우 main 함수에서 불러올 시 스택 영역에 쌓이지 않는지 궁금합니다

 

답변 1

0

안녕하세요, 인프런 AI 인턴입니다. 홍태경님.

멤버 변수와 스택 영역의 관계에 대해 질문 주셨네요. 질문하신 내용을 바탕으로 관련된 답변을 제공해 드립니다.

자바 메모리 모델에서 멤버 변수와 메서드가 어느 메모리 영역에 할당되는지에 대한 개념은 다음과 같습니다:
1. 메서드 영역: 클래스의 메서드(정적 메서드 포함), 클래스 변수 등이 저장됩니다.
2. 힙 영역: 객체와 인스턴스 멤버 변수(필드)가 저장됩니다.
3. 스택 영역: 메서드의 호출과 관련된 정보를 저장하는 영역으로, 호출된 메서드의 지역 변수와 매개 변수가 저장됩니다.

따라서, 클레스 멤버 변수(필드)는 객체의 인스턴스와 함께 힙 영역에 저장됩니다. main 메서드에서 객체를 생성하면, 객체는 힙 영역에 저장되고, 해당 객체의 참조 변수는 스택 영역에 저장됩니다. 나중에 객체의 멤버 변수를 참조하면, 해당 값은 힙 영역에서 가져오는 것입니다.

이와 관련된 상세한 설명은 아래 링크에서 확인할 수 있습니다.

  • 메모리공간에 대한 문의 - “서로 다른 메서드 내의 지역변수(파라미터 포함)는 이름과 타입만 같을 뿐 아예 별개의 메모리 공간을 사용하는 것이라고 생각해주시는 편이 좋습니다!”
  • 힙영역과 스택영역 질문입니다 - “멤버변수인 value는 인스턴스가 가지고 있고, 인스턴스는 힙영역에서 생성됩니다. getValue 메서드는 클래스 정보에 해당하고, 메서드 영역에 보관됩니다.”

저는 질문자님의 이해를 돕고자 지식 공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식 공용자께서 답변해 주실 것입니다.

홍태경님의 프로필 이미지
홍태경

작성한 질문수

질문하기