# String Constant Pool 이란?
- 리터럴("")로 구성된 문자열의 복사본을 Pool에 하나만 저장한 공간을 String Constant Pool이라고 한다.
# 왜 사용 하는지?
- 결론적으로는, 메모리 공간 효율성을 위해서 사용한다. 똑같은 문자열을 사용할 때마다 생성해주면 메모리 측면에서 너무 비효율적이니까 같은 문자열을 가진 String들은 저 Pool에 있는 문자열을 바라보게끔 만든 것 이다.
- [예시]
public class Main {
public static void main(String[] args) {
String test = "김성훈" ;
String test2 = "김성훈" ;
System.out.println(test.hashCode()) ;
System.out.println(test2.hashCode()) ;
}
}
# 내부 동작 순서
- JVM은 풀에서 동일한 값의 문자열을 검색합니다.
- 발견되면 Java 컴파일러는 추가 메모리를 할당하지 않고 메모리 주소에 대한 참조를 반환합니다.
# 추가 정보
[JAVA 7 이전]
- Java 7 이전에는 JVM이 고정된 크기를 갖는 PermGen 공간에 Java 문자열 풀이 존재했다.
- 이는 런타임 시 확장할 수 없고 가비지 수집을 할 수 없는 영역이다.
- PermGen(힙 대신)에 문자열을 인턴할 때의 위험은 너무 많은 문자열을 인턴할 경우 JVM에서 OutOfMemory 오류가 발생할 수 있다.
[JAVA 7 이후]
- Java String Pool은 JVM이 가비지 수집하는 힙 공간에 저장된다.
- 이 접근 방식의 장점은 참조되지 않은 문자열이 풀에서 제거되어 메모리가 해제되므로 OutOfMemory 오류의 위험이 줄어든다는 것을 의미한다.