티스토리 뷰
Java의 String Pool 이란 ?
문자열 리터럴이 저장되는 Java Heap의 영역이다.
(Java 7 이전까지는 Perm영역이었으나, OOM 문제로 인해 Heap으로 이동하였습니다.
String Intern Pool 혹은 String Constant Pool이라고도 불립니다..
문자열 리터럴?
Java에서 문자열을 생성하는 방식의 차이입니다.
String literal = "리터럴"; --> 리터럴 생성 방식
String object = new String("object"); --> 생성자 생성 방식
왜 String Pool 이 필요할까?
문자열을 만들때마다 문자열 객체를 힙메모리에 매번 생성되는것을 방지하기 위해서입니다..
--> 이를 위해 문자열 객체 생성시 문자열 리터럴을 사용하는 것을 추천합니다..
같은 참조를 공유한다면 다음의 결과는??
String s1 = "Hello";
String s2 = "Hello";
String s3 = new String("Hello");
String s4 = new String("Hello");
System.out.println(s1==s2); //true
System.out.println(s1==s3); //false
System.out.println(s3==s4); //false
String 객체가 리터럴 참조와 동일 비교를 하고 싶으면? => String.intern()
System.out.println(s1 == s3.intern()); //true
intern() 메서드는 String객체의 문자열이 String Pool에 존재하면 해당 참조를 반환하고, 존재하지 않으면
해당 문자열을 String Pool에 등록합니다.
이에 따라서 문자열 리터럴과 String 객체를 동일하다를 비교할때 intern()메서드를 이용해서 비교할 수도 있습니다.
공부하는데 도움 되었던 링크 : Java의 문자열 풀 - Javatpoint
'JAVA공부 > JVM' 카테고리의 다른 글
성능 시뮬레이션 - ② 가상 스레드 (0) | 2024.11.03 |
---|---|
GC 정리 (1) | 2024.10.07 |
자바 Heap Dump (0) | 2022.11.04 |
GC 튜닝 (0) | 2022.01.14 |
Garbage Collection 모니터링 (0) | 2022.01.12 |