자바 메모리 사용에 대해 궁금한 점이 있습니다.

21.10.22 14:46 작성 조회수 206

0

안녕하세요

 

자바를 공부하면서 자바의 메모리 사용에 대해 알아가고 있습니다.

지금까지 아는 바는 다음과 같습니다 :

  1. 객체(object)를 프로그래밍 언어로 구현한 것이 class이다.
  2. class를 메모리에 생성하면 사용자가 정의한 멤버변수(속성)와 멤버함수(메소드)는 Heap segment에 용량이 할당된다.
  3. Heap segment에 할당된 메모리 공간의 주소를 가리키는 '참조(형) 변수(reference variable)'가 Stack segment에 할당된다.
  4. 변수에 대입되는 값들(리터럴: 정수, 실수, 문자)은 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

답변을 작성해보세요.

답변을 기다리고 있는 질문이에요.
첫번째 답변을 남겨보세요!