KOTLIN · 성능
GC 튜닝과 메모리 관리
JVM 가비지 컬렉션의 동작을 이해하고 Kotlin 코드에서 GC 압력을 줄이는 전략을 다룹니다.
성능고급gcmemory-managementheapobject-allocation
핵심 설명
JVM 가비지 컬렉션의 동작을 이해하고 Kotlin 코드에서 GC 압력을 줄이는 전략을 다룹니다.
Kotlin code
fun main() {
// GC 모니터링
val rt = Runtime.getRuntime()
fun memStats() = buildString {
val used = (rt.totalMemory() - rt.freeMemory()) / 1024 / 1024
val total = rt.totalMemory() / 1024 / 1024
append("사용: ${used}MB / 전체: ${total}MB")
}
println("시작: ${memStats()}")
// 1. 임시 객체 최소화
// 나쁜 예: 매번 새 리스트 생성
// val bad = (1..100000).map { it.toString() }.filter { it.length > 3 }
// 좋은 예: 시퀀스로 중간 객체 제거
val good = (1..100000).asSequence()
.map { it.toString() }
.filter { it.length > 3 }
.toList()
println("리스트 생성 후: ${memStats()}")
// 2. 큰 객체 명시적 해제
var largeBuffer: ByteArray? = ByteArray(50 * 1024 * 1024) // 50MB
println("할당 후: ${memStats()}")
largeBuffer = null
System.gc()
Thread.sleep(100)
println("해제 후: ${memStats()}")
// 3. 객체 재사용
val reusableBuffer = StringBuilder(1024)
repeat(1000) { i ->
reusableBuffer.clear()
reusableBuffer.append("항목-").append(i)
// reusableBuffer.toString() 사용
}
println("완료: ${memStats()}")
println("리스트 크기: ${good.size}")
}학습 팁
JVM 옵션 -XX:+UseG1GC -Xmx512m으로 GC 알고리즘과 힙 크기를 조절합니다. -verbose:gc로 GC 로그를 확인하세요.
주의할 점
System.gc()를 직접 호출하는 것은 권장되지 않습니다. JVM이 GC 시점을 최적으로 결정하므로 수동 호출은 오히려 성능을 저하시킬 수 있습니다.
자주 묻는 질문
GC 튜닝과 메모리 관리란 무엇인가요?
JVM 가비지 컬렉션의 동작을 이해하고 Kotlin 코드에서 GC 압력을 줄이는 전략을 다룹니다.
GC 튜닝과 메모리 관리 학습 시 주의할 점은 무엇인가요?
System.gc() 를 직접 호출하는 것은 권장되지 않습니다. JVM이 GC 시점을 최적으로 결정하므로 수동 호출은 오히려 성능을 저하시킬 수 있습니다.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.