π‘μλλ‘μ΄λ κ°λ° νκ²½μμ μμ£Ό λ§μ£ΌμΉ μ μλ λ©λͺ¨λ¦¬ λμμ λν΄μ νμ΅νμμ΅λλ€ !
Memory Leak
- Memory Leakμ νλ‘κ·Έλ¨μ΄ λ μ΄μ μ¬μ©νμ§ μλ λ©λͺ¨λ¦¬λ₯Ό ν΄μ νμ§ μκ³ , κ³μ μ°¨μ§νκ³ μλ μνλ₯Ό λ§ν©λλ€.
- λ©λͺ¨λ¦¬ μμμ΄ λλΉλμ΄ μ±μ μ±λ₯μ΄ μ νλκ±°λ, μ¬ν κ²½μ° μ±μ΄ κ°μ μ’ λ£λλ λ¬Έμ λ₯Ό μΌμΌν¬ μ μμ΅λλ€.
- μλλ‘μ΄λμμλ μ£Όλ‘ μλ νκ²½μμ λ©λͺ¨λ¦¬ λμκ° λ°μν μ μμ΅λλ€.
μλλ‘μ΄λμμ Memory Leak
- μν μ μ§
- κ°μ²΄κ° Activity, Fragmentμ κ°μ λΌμ΄νμ¬μ΄ν΄μ κ°λ μ»΄ν¬λνΈμ κ°ν μ°Έμ‘°λ₯Ό μ μ§ν λ λ°μν©λλ€.
- 리μμ€ λμ
- μ¬μ© ν μ μ ν ν΄μ λμ§ μλ 리μμ€λ‘ νμΌ νΈλ€, λ°μ΄ν°λ² μ΄μ€ μ°κ²° λ±μ΄ μμ΅λλ€.
- μ½λ°± λ° λ¦¬μ€λ
- μ½λ°±μ΄λ 리μ€λκ° λ±λ‘λ ν ν΄μ λμ§ μκ±°λ μ μ ν κ΄λ¦¬λμ§ μμ λ λ°μν©λλ€.
Android Studio Profiler
- μλλ‘μ΄λ μ€νλμ€μμλ Profilerλ₯Ό ν΅ν΄ 리μμ€μ μ¬μ©λκ³Ό λμλ₯Ό νμΈν μ μμ΅λλ€.
- Memory νμμ Leaksκ° λ°μνμμ νμν΄μ£Όλ κΈ°λ₯μΌλ‘ λ©λͺ¨λ¦¬ λμλ₯Ό νμΈν μ μμ΅λλ€.
- μμ€ν λ©λͺ¨λ¦¬μ μ±μ΄ μ΄λ€ μν₯μ μ£Όκ³ μλ μ§μ λν΄ λ μμλ³Ό μ μλ€λ μ₯μ μ΄ μμ§λ§, μΆμ μ΄ μ½μ§ μμ΅λλ€.
μ± μ±λ₯ νλ‘νμΌλ§ | Android Studio | Android Developers
νμ§ λ°©μ
- Android Studio IDE νλ¨μμ Profiler νμ ν΅ν΄ νμΈν μ μμ΅λλ€.
- Memory μμμμ λ©λͺ¨λ¦¬μ λν΄ μμΈν λ΄μ©μ νμΈν μ μκ³ , Force Garbage Collectionμ μνν μ μμ΅λλ€.
- [Force Garbage Collection] : GC λ‘λ ν΄μ λμ§ μμ λ©λͺ¨λ¦¬λ₯Ό κ²μΆν©λλ€.
- Capture heap dumpλ₯Ό ν΅ν΄ Memory Leakκ° λ°μνλ μλ₯Ό νμΈν μ μμ΅λλ€.
- μ΄λ 첫 λ²μ§Έ νλͺ©λΆν° λΆμνλ©°, tree κ΅¬μ‘°λ‘ κ΅¬νλ κ³μΈ΅ ꡬ쑰μμ childλ₯Ό νμνμ¬ λμλ₯Ό λ°μνλ λ³μλ₯Ό νμΈν μ μμ΅λλ€.
- referenceλ₯Ό μ°Ύμκ°λ κ³Όμ μΌλ‘ μ΄λ€ μμΈμΌλ‘ λ©λͺ¨λ¦¬ λμκ° λ°μνλμ§λ₯Ό μ μΆν μ μμ΅λλ€.
Garbage Collection
- νλ‘κ·Έλ¨ κ°λ° μ λ°μν μ ν¨νμ§ μμ λ©λͺ¨λ¦¬λ₯Ό μ 리ν΄μ£Όλ κΈ°λ₯μ λλ€.
- JVMμ κ°λΉμ§ 컬λ ν°κ° λΆνμν λ©λͺ¨λ¦¬λ₯Ό μ 리νλ©°, GCλΌκ³ λ ν©λλ€.
LeakCanary
- LeakCanaryμ μλλ‘μ΄λ μ±μμ λ©λͺ¨λ¦¬ λμλ₯Ό μλμΌλ‘ νμ§νκ³ λΆμνλ λꡬμ λλ€.
- Squareμμ κ°λ°ν μ€ν μμ€ λΌμ΄λΈλ¬λ¦¬λ‘, μ±μ λ©λͺ¨λ¦¬ μ¬μ©μ λͺ¨λν°λ§νκ³ λμκ° λ°μνλ©΄ μ΄λ₯Ό κ°μ§νμ¬ κ°λ°μμκ² κ²½κ³ ν©λλ€.
μ£Όμ κΈ°λ₯
- μλ κ°μ§
- μ±μ΄ λ©λͺ¨λ¦¬ λμλ₯Ό λ°μμν¬ λ μ΄λ₯Ό μλμΌλ‘ κ°μ§ν©λλ€.
- Report
- λμλ₯Ό λ°κ²¬νλ©΄ μμΈν 리ν¬νΈλ₯Ό μμ±νλ©°, μ΄ λ¦¬ν¬νΈμλ λ©λͺ¨λ¦¬ λμκ° λ°μν μμΉμ μμΈμ λν μ λ³΄κ° ν¬ν¨λ©λλ€.
- λλ²κΉ
μ§μ
- 리ν¬νΈμλ λ©λͺ¨λ¦¬ λμμ heap dumpλ₯Ό ν¬ν¨ν λΆμ μ λ³΄κ° μμ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ λ° μ μ©ν©λλ€.
μμ‘΄μ± μΆκ°
- LeakCanaryμ μ¬μ©νκΈ° μν΄μλ μμ‘΄μ±μ μΆκ°ν©λλ€.
- μ±μ λλ²κ·Έ λΉλμμλ§ μλνλ©°, μ±μ λΉλνλ©΄ μλμΌλ‘ λ©λͺ¨λ¦¬ λμλ₯Ό κ°μ§ν©λλ€.
dependencies {
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.10'
}
- μ΄λ₯Ό νμ©ν΄ λ©λͺ¨λ¦¬ λμλ₯Ό μ‘°κΈ°μ λ°κ²¬νκ³ μμ ν¨μΌλ‘μ¨ μ±μ μμ μ±κ³Ό μ±λ₯μ ν¬κ² κ°μ ν μ μμ΅λλ€.
λμ λ°©μ
- retained κ°μ²΄ κ°μ§νκΈ°
- Activity, Fragment, View, ViewModel λ±μ΄ νκ΄΄λκ³ 5μ΄ μ΄λ΄μ GCκ° λμ§ μμΌλ©΄ retained λ κ²μΌλ‘ νλ¨ν΄ μ΄λ₯Ό Logcatμ κΈ°λ‘ν©λλ€.
- μ΄ ν LeakCanaryλ νμ λ€ννκΈ° μ μ retained κ°μ²΄λ€μ μλ₯Ό μΈκ³ μλ¦ΌμΌλ‘ νμν©λλ€.
- ν λ©λͺ¨λ¦¬ λ€ννκΈ°
- retained κ°μ²΄μκ° μκ³κ°μ λμ΄κ°λ©΄ LeakCanaryλ Java ν λ©λͺ¨λ¦¬ μμμ μλλ‘μ΄λ νμΌ μμ€ν μ .hprof νμΌλ‘ λ€νν©λλ€.
- νμ λ€ννλ©΄ 짧μ μκ° λμ μ±μ΄ μ μ§λκ³ , LeakCanaryμ ν μ€νΈκ° νμλ©λλ€.
- ν λ©λͺ¨λ¦¬ λΆμνκΈ°
- SharkλΌλ λΆμ λꡬλ₯Ό νμ©νμ¬ μ μ₯ λ .hprof νμΌμ λΆμνκ³ , λ€νλ νμμ retained κ°μ²΄λ₯Ό μ°Ύμλ λλ€.
- λΆμμ΄ μλ£λλ©΄ λ‘κ·ΈμΊ£ λ° μλ¦Όμ ν΅ν΄ λΆμ κ²°κ³Όλ₯Ό νμΈν μ μμ΅λλ€.
- λ©λͺ¨λ¦¬ λμ λΆλ₯νκΈ°
- LeakCanaryλ μ±μμ μ°Ύμ λ©λͺ¨λ¦¬λ¦μ μλμ κ°μ΄ λΆλ₯ν©λλ€.
- μ ν리μΌμ΄μ λμ
- λΌμ΄λΈλ¬λ¦¬ λμ
- μ΄λ₯Ό ν΅ν΄ νμ¬ μ½λ λ²κ·Έλ‘ λ°μν λ©λͺ¨λ¦¬ λμμΈμ§, μ ν리μΌμ΄μ λ΄λΆ λμμΈμ§ νμΈν μ μμ΅λλ€.
- LeakCanaryλ μ±μμ μ°Ύμ λ©λͺ¨λ¦¬λ¦μ μλμ κ°μ΄ λΆλ₯ν©λλ€.