• 카테고리

    질문 & 답변
  • 세부 분야

    프로그래밍 언어

  • 해결 여부

    미해결

스택영역과 힙영역 질문입니다.

24.03.22 22:49 작성 조회수 153

0

[질문 내용]
여기에 질문 내용을 남겨주세요.

 

제가 이해력이 안좋아서 자꾸 질문을 남기게되네요 ㅠ

 

method1()의 스택프레임이 제거되고 지역변수 data1도 함께 제거되었다. 여기는 이해가 갑니다. Data data1 = new Data(10);으로 만들어 져서 data1은 참조값 x001을 갖고 있고 Data의 인스턴스라는 것과 메서드 내에서 사용했기 때문에 data1은 지역변수라 칭한것도 이해가 됩니다. 하지만

정리 부분에 // 지역 변수는 스택 영역에, 객체(인스턴스)는 힙 영역에 관리되는 것을 확인 했다.//

이 부분에서 지역 변수라 하면 data1이고 또 객체라 하면 Data인스턴스에 data1의 참조값을 지칭하는 말 일텐데 제가 제대로 이해하지 못한 부분이 있나 싶습니다.

답변 2

·

답변을 작성해보세요.

1

임다정님의 프로필

임다정

2024.03.22

data1은 지역변수인데 Data의 객체라 스택에 있는지 힙영역에 있는지 햇갈리시는건가요?

 

data1"이라는 변수는 스택 영역에 있지만, 이 변수가 참조하는 "Data 인스턴스"는 힙 영역에 저장된다는 것입니다. 다시 말해, "data1" 변수 자체는 스택 영역에 있지만, 이 변수가 참조하는 실제 데이터는 힙 영역에 있습니다. 그래서 "data1" 변수가 소멸되더라도(메서드가 종료되더라도) 실제 데이터는 힙 영역에 그대로 남아 있을 수 있습니다.

qpdlqg님의 프로필

qpdlqg

질문자

2024.03.23

아 data1은 지역 변수라서 실제로 스택 영역에 있지만 data1이 생성될 때 가르키는 참조 값이 힙 영역에 있기 때문에 변수 자체가 힙 영역에 있다는 것이 아니군요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2024.03.22

안녕하세요, 인프런 AI 인턴입니다.

qpdlqg님의 스택 영역과 힙 영역에 대한 질문에 대하여, 스택 영역과 힙 영역에서 변수와 객체가 어떻게 관리되는지에 대한 혼란이 있는 것 같습니다. 스택 영역은 메서드 호출 시 생성된 지역 변수들을 저장하는 공간이며, 힙 영역은 new 키워드로 생성된 객체(인스턴스)가 저장되는 공간입니다. 이에 대한 구체적인 설명과 예시를 포함한 답변이 필요하신 경우, 아래의 답변 링크를 참조해주시면 도움이 될 것 같습니다.

  • 스택 영역과 힙 영역에서는 스택 영역과 힙 영역에 관한 기본적인 질문에 대해 답변하고 있습니다. 이미지와 함께 자세한 설명을 통해, 메서드 내에서 생성된 지역 변수와 객체가 메모리에서 어떻게 처리되는지 설명하고 있습니다.

  • 또한, 메모리 영역에 관해서 질문드릴게요 역시 메서드 영역, 스택 영역, 힙 영역이 어떻게 작동하는지에 대한 설명을 제공합니다. 이 답변은 메서드 호출과 로컬 변수, 객체가 메모리에서 어떻게 관리되는지에 대한 이해를 돕습니다.

이러한 자료들을 통해 스택 영역과 힙 영역, 그리고 객체와 지역 변수가 메모리에서 어떻게 관리되는지에 대한 근본적 이해를 도와드릴 수 있기를 바랍니다.

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

qpdlqg님의 프로필

qpdlqg

질문자

2024.03.22

package memory;

public class JavaMemoryMain2 { // 스택 영역, 힙 영역
    public static void main(String[] args) {
        System.out.println("main start");
        method1();
        System.out.println("main end");
    }

    static void method1() {
        System.out.println("method1 start");
        Data data1 = new Data(10); // data1 = 지역변수 스택영역
        method2(data1);
        System.out.println("method1 end");
    }

    static void method2(Data data2) { // data2 = 매개변수 힙 영역 x001참조값이 들어가 있음
        System.out.println("methgd2 start");
        System.out.println("data.value = "+ data2.getValue());
        System.out.println("methgd2 end");
    }

그러면 혹시 제가 생각했던게 맞을까요? 스택영역에는 data1 data2 같은 변수들이 존재하고 힙영역 에는 Data data1 = new Data(); data1 이라는 변수는 스택 영역에 있지만 힙 영역에서는 Data의 인스턴스가 생성이 되었으니 힙 영역에서 data1이 생성 되었을 때의 참조 값을 가지고있다.