Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .jules/bolt.md
Original file line number Diff line number Diff line change
Expand Up @@ -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()`를 사용하세요.
8 changes: 6 additions & 2 deletions src/main/kotlin/html4tree/main.kt
Original file line number Diff line number Diff line change
Expand Up @@ -356,7 +356,7 @@ fun process_ignore_file(curr_dir: File, dirFilesNames: Array<String>? = null): S
it.isHiddenFile() ||
normalizedName in Constants.defaultSensitiveFileNamesLowercase ||
normalizedName.endsWith("~") ||
Constants.defaultSensitiveExtensions.any { extension ->
Constants.defaultSensitiveExtensionsArray.any { extension ->
normalizedName.endsWith(extension)
}
) {
Expand Down Expand Up @@ -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",
Expand All @@ -526,4 +527,7 @@ private object Constants {
".swo",
".swpx"
)

@JvmField
val defaultSensitiveExtensions = defaultSensitiveExtensionsArray.toList()
}
Loading