PHpullh
학습 라이브러리/Java/문자열 최적화

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 성능이 저하됩니다. 중복이 매우 많은 경우에만 사용하세요.