-
카테고리
-
해결 여부
미해결
자바 메모리 사용에 대해 궁금한 점이 있습니다.
21.10.22 14:46 작성 조회수 206
0
안녕하세요
자바를 공부하면서 자바의 메모리 사용에 대해 알아가고 있습니다.
지금까지 아는 바는 다음과 같습니다 :
- 객체(object)를 프로그래밍 언어로 구현한 것이 class이다.
- class를 메모리에 생성하면 사용자가 정의한 멤버변수(속성)와 멤버함수(메소드)는 Heap segment에 용량이 할당된다.
- Heap segment에 할당된 메모리 공간의 주소를 가리키는 '참조(형) 변수(reference variable)'가 Stack segment에 할당된다.
- 변수에 대입되는 값들(리터럴: 정수, 실수, 문자)은 JVM에 제공하는 Constant pool이 Heap segment에 올려지고, 변수에 값을 대입하는 것은 할당된 변수 메모리에 대입하려는 값을 constant pool에서 찾아 그 주소를 가리키게 하는 것이다.
자바의 메모리 사용에 대해 검색해보니 String 객체를 예시로 든 내용들을 많이 보았습니다. 제가 이해한 바는 다음과 같습니다 :
// 사례 1 String example = "example"; /* 사례 1의 경우 example이라는 참조변수는 스택에 할당되고, 이것이 직접 힙의 상수 풀의 "example"이 있는 메모리의 주소를 가리킨다. */
// 사례 2
String example = new String("example");
/*
사례 2의 경우 example이라는 참조변수는 스택에 할당되고,
String 객체의 한 인스턴스가 힙에 생성되며,
그 인스턴스가 상수 풀의 example"이 있는 메모리의 주소를 가리킨다.
*/
위의 사례에 대하여 실제 메모리 사용이 어떻게 이루어지는지 궁금해서 질문 올립니다.
제가 생각해본 결과 다음 세 경우 중 하나에 해당하리라고 추측하는데 어느 것이 맞는지 알고 싶습니다.
감사합니다.
답변을 작성해보세요.
답변 0