KOTLIN · 성능
메모리 최적화
객체 할당을 줄이고 메모리 사용을 최적화하는 기법입니다. 원시 타입 배열, 객체 풀, WeakReference를 다룹니다.
성능고급memoryobject-poolprimitive-arrayweak-reference
핵심 설명
객체 할당을 줄이고 메모리 사용을 최적화하는 기법입니다. 원시 타입 배열, 객체 풀, WeakReference를 다룹니다.
Kotlin code
import java.lang.ref.WeakReference
fun main() {
// 1. 원시 타입 배열 (박싱 방지)
val intArray = IntArray(1000) { it } // int[] (박싱 없음)
val intList = List(1000) { it } // List<Integer> (박싱 발생)
println("IntArray sum: ${intArray.sum()}")
// 2. StringBuilder (문자열 연결 최적화)
val slow = buildString { repeat(10000) { append("item ") } } // 효율적
// val slow2 = (1..10000).fold("") { acc, _ -> acc + "item " } // 비효율!
// 3. 객체 재사용 (풀)
class ObjectPool<T>(private val factory: () -> T, poolSize: Int = 10) {
private val available = ArrayDeque<T>()
init { repeat(poolSize) { available.add(factory()) } }
fun acquire(): T = available.removeFirstOrNull() ?: factory()
fun release(obj: T) { available.addLast(obj) }
}
val bufferPool = ObjectPool({ StringBuilder(256) }, 5)
val buf = bufferPool.acquire()
buf.append("재사용 가능!")
println(buf.toString())
buf.clear()
bufferPool.release(buf)
// 4. WeakReference (캐시)
var largeData: ByteArray? = ByteArray(1024 * 1024)
val weakRef = WeakReference(largeData)
largeData = null // 강한 참조 제거
System.gc()
println("WeakRef 유효: ${weakRef.get() != null}")
}학습 팁
IntArray, LongArray 등 원시 타입 배열은 박싱 오버헤드가 없어 대량 수치 연산에 훨씬 빠릅니다.
주의할 점
문자열 연결에 +를 반복 사용하면 매번 새 String 객체가 생성됩니다. buildString이나 StringBuilder를 사용하세요.
자주 묻는 질문
메모리 최적화란 무엇인가요?
객체 할당을 줄이고 메모리 사용을 최적화하는 기법입니다. 원시 타입 배열, 객체 풀, WeakReference를 다룹니다.
메모리 최적화 학습 시 주의할 점은 무엇인가요?
문자열 연결에 + 를 반복 사용하면 매번 새 String 객체가 생성됩니다. buildString 이나 StringBuilder 를 사용하세요.
Continue Learning
Kotlin 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.