바꾸려는 동작
String 결합 성능에서 바꿀 결과와 유지할 기존 동작을 한 문장씩 적습니다. 반복문에서 immutable String을 계속 +로 누적하면 중간 복사가 늘 수 있지만 한 표현식의 결합은 compiler가 최적화할 수 있습니다.
핵심 원리
빠르다는 인상 대신 런타임 버전, warm-up, 입력 분포, p50·p95·p99와 CPU·I/O·할당량을 기록합니다. 같은 결과와 오류 처리를 제공하지 않는 두 구현의 숫자는 비교 자료가 아닙니다. 현재 version의 공식 문서와 실제 설정을 확인하고 대표·경계·실패 사례를 준비합니다. GC log, JFR, thread dump, class histogram, heap dump와 OS RSS를 같은 사건 기준으로 수집한다.
| 순서 | 할 일 |
|---|---|
| 1 | 수정 전 결과와 되돌릴 기준 저장 |
| 2 | 핵심 사실과 맞닿은 한 곳만 변경 |
| 3 | 같은 입력으로 수정 전후 비교 |
단계별 적용 예시
profiler와 실행 계획에서 가장 큰 비용을 먼저 줄입니다. 메서드 하나를 바꾸는 micro optimization보다 알고리즘 복잡도, 데이터 왕복, 복사와 직렬화 횟수를 먼저 고칩니다. 객체 보유 경로와 lock 소유자를 증거로 확정하고 pool·queue·heap 제한을 전체 프로세스 메모리 예산에 맞춘다. 예상과 다르면 변경을 더 얹지 말고 처음 달라진 값으로 돌아갑니다. 장시간 부하에서 GC 후 live-set, allocation rate, pause, p99, thread 수와 native memory를 비교한다. 대표 입력과 최악 입력을 분리해 독립된 프로세스로 반복하고 처리량 증가가 오류율, 메모리, 가독성과 운영 복잡성을 악화시키지 않았는지 확인합니다.
공식 문서와 적용 범위
문서의 기본값과 동작은 version에 따라 달라질 수 있습니다. 현재 JDK/JVM version, 실행 옵션, collector, runtime 환경과 실제 memory 사용 패턴에서 다시 확인합니다.