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

 

 

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

 

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

 

 

 

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

 

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

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

 

 

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

 

 

 

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

 

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

 

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

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형

댓글