Git :)

ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • String Constant Pool 이란?
    Java 2023. 11. 8. 00:21

    # 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 오류의 위험이 줄어든다는 것을 의미한다.

    'Java' 카테고리의 다른 글

    Garbage Collection  (1) 2023.11.09
    자바의 Reflection 활용하기  (0) 2023.11.08
    멀티프로세스와 멀티스레드  (0) 2023.10.31
    JIT(Just In Time)이란?  (0) 2023.10.31
    ArrayBlockingQueue vs LinkedBlockingQueue  (0) 2023.10.24