일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- well known 포트
- IEEE 802
- 비주기신호
- 99클럽
- 코딩테스트준비
- 프레임 구조
- 항해99
- i-type
- leetcode
- 개발자취업
- 오블완
- xv6
- 주기신호
- git merge
- til
- 서비스 프리미티브
- 플로이드워셜
- reducible
- 티스토리챌린지
- 오류제어
- tcp 프로토콜
- mariadb
- tcp 세그먼트
- 데이터 전송
- 오류검출
- 스레드
- 그리디 알고리즘
- 순서번호
- 우분투db
- 토큰 버스
- Today
- Total
Unfazed❗️🎯
[Java] String Pool 본문
Java의 String Pool은 JVM이 문자열 객체를 효율적으로 관리하기 위해 사용하는 특별한 메모리 영역이다. 이를 통해 동일한 문자열 값을 가진 객체를 재사용하여 메모리 사용량을 줄이고 성능을 향상시킬 수 있다.
기본 개념
String Pool(또는 String Constant Pool, String Intern Pool)은 JVM의 힙 메모리 내에 존재하는 특별한 공간으로, 문자열 리터럴이 저장된다. String Pool은 문자열의 불변성(immutability)과 String interning이라는 개념을 기반으로 동작한다.
2. 문자열 생성 방식과 String Pool
1. 문자열 리터럴 생성
String s1 = "hello";
String s2 = "hello";
- JVM은 str1을 생성할 때 "hello"라는 리터럴이 String Pool에 존재하는지 확인한다.
- 만약 존재한다면, 해당 객체의 참조를 반환하고, 존재하지 않는다면 새로운 문자열 객체를 생성하고 String Pool에 저장한 후 참조를 반환한다.
- 두 번째 "hello"를 만날 때는 Pool에서 기존 문자열을 찾아 참조만 반환한다.
- 결과적으로 s1 == s2는 true가 된다. (같은 객체 참조)
2. new 키워드 방식
String s3 = new String("hello");
- new 키워드 사용 시 힙 메모리에 새 문자열 객체가 생성된다.
- 이 경우 동일한 값의 문자열이 String Pool에 존재하더라도 이를 무시하고 새로운 객체를 만든다.
- 즉, String Pool의 객체를 재사용하지 않는다.
- 따라서 s1 == s3는 false이다. (다른 객체 참조)
3. intern() 메소드(String Interning)
String interning은 동일한 값을 가진 문자열 객체를 하나만 유지하도록 하는 JVM의 최적화 기법이다.
String s4 = new String("hello").intern();
- intern()은 String Pool에서 동일한 내용의 문자열을 찾는다.
- 있으면 해당 참조를 반환하고, 없으면 Pool에 추가 후 반환한다.
- s1 == s4는 true가 된다.
JVM에서 더 이상 사용되지 않는 문자열은 가비지 컬렉션 대상이 될 수 있지만, 일반적으로 String Pool 내의 리터럴은 프로그램 종료 시까지 유지된다. 따라서 String Pool은 메모리 사용을 최적화하지만, 과도한 intern 사용은 오히려 메모리 사용량을 증가시킬 수 있어 이를 주의해야 한다.
4. 동작 과정
- 문자열 리터럴이 등장하면 JVM은 내부적으로 String Pool에서 해당 문자열을 검색한다.
- 검색에는 해시 테이블이 사용된다. (문자열의 해시코드 기반)
- 일치하는 문자열이 있으면 기존 참조를 반환한다.
- 일치하는 문자열이 없으면 String Pool에 해당 문자열을 새로 추가하고 그 참조를 반환한다.
String 메모리 관리 방식 변화
- Java 7 이전: String Pool은 PermGen 영역(고정 크기)에 있었다.
- Java 7 이후: Heap 영역으로 이동하여 GC 대상이 되었다.
- Java 9 이후: Compact Strings 도입으로 메모리 효율성이 더욱 향상되었다.
참고 자료:
https://en.wikipedia.org/wiki/String_interning
String interning - Wikipedia
From Wikipedia, the free encyclopedia Data structure for reusing strings In computer science, string interning is a method of storing only one copy of each distinct string value, which must be immutable.[1] Interning strings makes some string processing ta
en.wikipedia.org
https://www.scaler.com/topics/java/string-pool-in-java/
String Pool in Java - Scaler Topics
Learn about String Pool in Java by Scaler Topics. String Pool or String Constant Pool is a special area in Java Heap memory where string literals are stored.
www.scaler.com
https://www.digitalocean.com/community/tutorials/what-is-java-string-pool
What is Java String Pool? | DigitalOcean
While we believe that this content benefits our community, we have not yet thoroughly reviewed it. If you have any suggestions for improvements, please let us know by clicking the “report an issue“ button at the bottom of the tutorial.
www.digitalocean.com
https://www.baeldung.com/java-9-compact-string
'Java' 카테고리의 다른 글
JVM 객체 생성과 메모리 레이아웃 (0) | 2025.06.17 |
---|---|
JVM 메모리 구조와 메모리 오버플로우 (0) | 2025.06.17 |
[Java] 참조변수, 메모리 주소, hash code, identity hash code (0) | 2025.03.10 |
[Java] 올바른 Optional 사용으로 API 설계하기 (0) | 2025.02.26 |
[Java] null 참조로 인해 발생하는 문제 (0) | 2025.02.14 |