diff --git a/.jules/bolt.md b/.jules/bolt.md index ee124e69..c092737b 100644 --- a/.jules/bolt.md +++ b/.jules/bolt.md @@ -62,3 +62,7 @@ ## 2026-08-11 - Array의 toMutableList 할당 오버헤드 최적화 **학습:** 배열을 정렬하기 위해 `.toMutableList()`를 호출하면 새로운 `ArrayList` 객체와 내부 배열 객체가 할당되어 대규모 디렉토리를 순회할 때 가비지 컬렉션(GC) 부하를 유발합니다. 배열 복제가 필요한 경우 `.clone()`을 사용하면 하나의 배열 객체만 새로 할당되므로 더 효율적입니다. **조치:** 디렉토리 파일 배열을 정렬하기 전에 복사할 때 `.toMutableList()` 대신 `.clone()`을 사용하여 불필요한 중간 컬렉션 할당을 제거하고 성능을 향상시켰습니다. + +## 2024-05-19 - [arrayOf를 사용한 확장자 검사 최적화] +**Learning:** Kotlin에서 List에 대해 `.any {}`를 직접 호출하면 매번 새로운 Iterator 객체가 할당됩니다. 정적인 List 대신 배열(`arrayOf()`)을 정의하고 `.any {}`를 호출하면 할당을 방지할 수 있습니다. `Array.any` 인라인 함수는 원시 인덱스 기반 루프로 컴파일되기 때문입니다. 또한 `listOf(...).toTypedArray()`보다 처음부터 `arrayOf(...)`를 사용하는 것이 불필요한 중간 리스트 생성을 막아 더 효율적입니다. +**Action:** 고차 함수(예: `.any {}`)를 사용하여 자주 순회하는 정적 컬렉션에는 `arrayOf()`를 사용하세요. diff --git a/src/main/kotlin/html4tree/main.kt b/src/main/kotlin/html4tree/main.kt index 0972fa2c..2daf1cfb 100644 --- a/src/main/kotlin/html4tree/main.kt +++ b/src/main/kotlin/html4tree/main.kt @@ -356,7 +356,7 @@ fun process_ignore_file(curr_dir: File, dirFilesNames: Array? = null): S it.isHiddenFile() || normalizedName in Constants.defaultSensitiveFileNamesLowercase || normalizedName.endsWith("~") || - Constants.defaultSensitiveExtensions.any { extension -> + Constants.defaultSensitiveExtensionsArray.any { extension -> normalizedName.endsWith(extension) } ) { @@ -503,8 +503,9 @@ private object Constants { val defaultSensitiveFileNamesLowercase = defaultSensitiveFiles.map { it.toLowerCase(java.util.Locale.ROOT) }.toSet() + // ⚡ Bolt: Kotlin에서 List.any {} 호출 시 매번 발생하는 Iterator 할당 오버헤드를 방지하기 위해 정적 배열로 변환 @JvmField - val defaultSensitiveExtensions = listOf( + val defaultSensitiveExtensionsArray = arrayOf( ".pem", ".key", ".p12", @@ -526,4 +527,7 @@ private object Constants { ".swo", ".swpx" ) + + @JvmField + val defaultSensitiveExtensions = defaultSensitiveExtensionsArray.toList() }