JVM/Java

[Java] StringBuffer append("a"+"b") 메모리는 어떻게 할당될까?

헹창 2019. 8. 1.
반응형

Java는 C언어처럼 포인터가 없어 메모리의 주소와 해당 값을 함께 볼 수 없는 단점이 너무 너무 너무~ 크다 !

 

Java 문서나 많은 글을 읽어도 메모리의 구조가 어떻게 어떤 흐름으로 돌아가는 지 내가 알고 있는 이 답이 확실한가에 대한 의문도 많이 든다.

 

 

StringBuffer의 append 메소드를 사용할 때, 어떤 식으로 값이 메모리에 할당되고 흘러가는 지 내가 이해한 바를 정리하고자 한다.

 

StringBuffer sb = nes StringBuffer();
sb.append("a");
sb.append("b");
 

 

단순 참조를 위한 문자열은 String 클래스, 연산이 많은 경우는 가변적으로 문자열을 저장하고 관리하는 StringBuffer 클래스를 사용한다.

 

 

String 과 StringBuffer의 차이점이 궁금하다면?

Link : https://haenny.tistory.com/17

 

[Java] String, StringBuffer, StringBuilder의 차이점 스윽

[Java] String, StringBuffer, StringBuilder의 차이점 스윽 String 과 StringBuffer(StringBuilder), 두 클래스 모두 문자열을 담고 연산하는 것인데 차이가 뭐지? 성능이 어떻게 다르지? 궁금했던 분들에게 그..

haenny.tistory.com

 

 

위 코드와 같은 경우,  다음과 같은 구조를 보인다.

 

 

 

 

그렇다면, 이런 경우에는 메모리에 데이터가 어떻게 쌓일까? 궁금증이 들었다.

 

StringBuffer sb = nes StringBuffer();
sb.append("a"+"b");
 

 

물론,  String 클래스 문자열 연산의 단점을 보완하고자 StringBuffer 클래스를 사용하는 것이니 굳이 StringBuffer에 String 연산은 안하길 바란다.

 

 

본론으로 돌아가서 위 코드의 경우 메모리 구조가 어떻게 될까?

 

 

 

다음과 같은 구조를 보이지 않을까 생각한다.

 

 

여기서 sb가 가리키는 주소의 데이터가 단순히 "ab" 데이터가 아닌, string pool에 할당된 "ab"데이터의 주소값을 갖고있을 것이다. 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형

댓글

추천 글