JAVA · 성능/JVM
문자열 최적화
문자열 처리의 성능을 개선하는 다양한 기법입니다.
성능/JVM중급String최적화StringBuilderCompactStrings
핵심 설명
문자열 처리의 성능을 개선하는 다양한 기법입니다.
Java code
public class StringOptimization {
public static void main(String[] args) {
// 1. 문자열 연결: + vs StringBuilder
// Java 9+에서 +는 invokedynamic으로 최적화
// 루프에서는 여전히 StringBuilder가 유리
StringBuilder sb = new StringBuilder(1000);
for (int i = 0; i < 1000; i++) {
sb.append("item").append(i).append(", ");
}
// 2. String.intern() — 중복 문자열 제거
// 주의: intern() 테이블은 네이티브 메모리 사용
String s1 = new String("hello").intern();
String s2 = "hello";
System.out.println(s1 == s2); // true
// 3. compact strings (Java 9+)
// 내부적으로 Latin1은 byte[], 유니코드는 UTF-16
// 메모리 자동 절약 (별도 설정 불필요)
// 4. 정규식 캐싱
// Pattern은 한 번만 컴파일
var pattern = java.util.regex.Pattern.compile("\\d+");
for (int i = 0; i < 1000; i++) {
pattern.matcher("abc123").find(); // 재사용
}
// 5. String.format vs StringBuilder
// format()은 느림, 성능 중요 시 StringBuilder
String fast = new StringBuilder()
.append("이름: ").append("홍길동")
.append(", 나이: ").append(30)
.toString();
System.out.println("최적화 완료: " + fast);
}
}학습 팁
Java 9의 Compact Strings 덕분에 ASCII 문자열은 메모리를 절반만 사용합니다. 별도 설정 없이 자동 적용됩니다.
주의할 점
String.intern()을 과도하게 사용하면 네이티브 메모리가 증가하고 GC 성능이 저하됩니다. 중복이 매우 많은 경우에만 사용하세요.
자주 묻는 질문
문자열 최적화란 무엇인가요?
문자열 처리의 성능을 개선하는 다양한 기법입니다.
문자열 최적화 학습 시 주의할 점은 무엇인가요?
String.intern() 을 과도하게 사용하면 네이티브 메모리가 증가하고 GC 성능이 저하됩니다. 중복이 매우 많은 경우에만 사용하세요.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.