작성
·
251
0
[질문 내용]
여기에 질문 내용을 남겨주세요.
제가 이해력이 안좋아서 자꾸 질문을 남기게되네요 ㅠ
method1()의 스택프레임이 제거되고 지역변수 data1도 함께 제거되었다. 여기는 이해가 갑니다. Data data1 = new Data(10);으로 만들어 져서 data1은 참조값 x001을 갖고 있고 Data의 인스턴스라는 것과 메서드 내에서 사용했기 때문에 data1은 지역변수라 칭한것도 이해가 됩니다. 하지만
정리 부분에 // 지역 변수는 스택 영역에, 객체(인스턴스)는 힙 영역에 관리되는 것을 확인 했다.//
이 부분에서 지역 변수라 하면 data1이고 또 객체라 하면 Data인스턴스에 data1의 참조값을 지칭하는 말 일텐데 제가 제대로 이해하지 못한 부분이 있나 싶습니다.
답변 2
1
data1은 지역변수인데 Data의 객체라 스택에 있는지 힙영역에 있는지 햇갈리시는건가요?
data1"이라는 변수는 스택 영역에 있지만, 이 변수가 참조하는 "Data 인스턴스"는 힙 영역에 저장된다는 것입니다. 다시 말해, "data1" 변수 자체는 스택 영역에 있지만, 이 변수가 참조하는 실제 데이터는 힙 영역에 있습니다. 그래서 "data1" 변수가 소멸되더라도(메서드가 종료되더라도) 실제 데이터는 힙 영역에 그대로 남아 있을 수 있습니다.
0
안녕하세요, 인프런 AI 인턴입니다.
qpdlqg님의 스택 영역과 힙 영역에 대한 질문에 대하여, 스택 영역과 힙 영역에서 변수와 객체가 어떻게 관리되는지에 대한 혼란이 있는 것 같습니다. 스택 영역은 메서드 호출 시 생성된 지역 변수들을 저장하는 공간이며, 힙 영역은 new 키워드로 생성된 객체(인스턴스)가 저장되는 공간입니다. 이에 대한 구체적인 설명과 예시를 포함한 답변이 필요하신 경우, 아래의 답변 링크를 참조해주시면 도움이 될 것 같습니다.
스택 영역과 힙 영역에서는 스택 영역과 힙 영역에 관한 기본적인 질문에 대해 답변하고 있습니다. 이미지와 함께 자세한 설명을 통해, 메서드 내에서 생성된 지역 변수와 객체가 메모리에서 어떻게 처리되는지 설명하고 있습니다.
또한, 메모리 영역에 관해서 질문드릴게요 역시 메서드 영역, 스택 영역, 힙 영역이 어떻게 작동하는지에 대한 설명을 제공합니다. 이 답변은 메서드 호출과 로컬 변수, 객체가 메모리에서 어떻게 관리되는지에 대한 이해를 돕습니다.
이러한 자료들을 통해 스택 영역과 힙 영역, 그리고 객체와 지역 변수가 메모리에서 어떻게 관리되는지에 대한 근본적 이해를 도와드릴 수 있기를 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
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이 생성 되었을 때의 참조 값을 가지고있다.
아 data1은 지역 변수라서 실제로 스택 영역에 있지만 data1이 생성될 때 가르키는 참조 값이 힙 영역에 있기 때문에 변수 자체가 힙 영역에 있다는 것이 아니군요.