brunch

You can make anything
by writing

C.S.Lewis

by 김선우 Jun 09. 2016

String Pool

String Pool (String constrant pool)이란 Java Heap Memory에 있는 스트링 저장소다. 


위에 사진을 보면 잘 이해할 수 있다.  쌍따옴표로 만들어진 s1, s2는 컴파일할때 .class 파일의 String Pool에 들어가게 된다. 이와 달리 생성자로 만들어진 s3는 여느 객체와 마찬가지로 힙메모리에 저장된다. 


같은 문자열인데 굳이 다른 객체를 생성할 필요가 있나.. 하나의 객체를 사용할 수 없을까~? -> intern()

intern()메소드는 String객체를 상수화시킨다. 


String s1 = "Cat";
String s2 = new String("Cat").intern();

System.out.println(s1.hashCode()); //67510
System.out.println(s2.hashCode()); //67510


해시코드 값이 같다. 

이렇게해서 힙 메모리를 아낄 수 있는 반면, 비용이 많이 든다. 

intern() 메소드의 작동 원리는 다음과 같다.


1. String Pool에서 equal()을 통하여 객체의 내용이 같은 것이 있다면 반환한다.

2. 없으면 String Pool에 객체를 추가하고 추가한 객체를 반환한다.


공부하다가 내용 추가할 예정




이미지 출처 : http://www.journaldev.com/797/what-is-java-string-pool




브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari