Garbage Collection (GC)
์ฃผ๋ก Java/Kotlin๊ณผ ๊ฐ์ Managed Language์์ ์ฌ์ฉํฉ๋๋ค. ์๋๋ก์ด๋๋ ์ฑ ๊ฐ๋ฐ์ Java์ Kotlin์ ์ฌ์ฉํ๋ฏ๋ก, GC๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ํต์ฌ ์ญํ ์ ํฉ๋๋ค.
GC๋ ์ฑ์ด ์ฌ์ฉํ์ง ์๋ ๊ฐ์ฒด๋ฅผ ํ์งํ์ฌ ์๋์ผ๋ก ํ์ํ๋ ์์คํ ์ ๋๋ค. ์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ง์ ํ์ง ์์๋ ์์ ์ ์ผ๋ก ๋์ํ ์ ์์ต๋๋ค.
๋ฉ๋ชจ๋ฆฌ ํ์ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๊ฐ์ฒด๋ ์ฑ์ด ๋์ํ๋ ์ค์ ์์ฑ๋ฉ๋๋ค. ๊ฐ์ฒด๊ฐ ๋ ์ด์ ์ฐธ์กฐ๋์ง ์์ผ๋ฉด Garbage๋ก ๊ฐ์ฃผํฉ๋๋ค.
- ์ฐธ์กฐ ๊ทธ๋ํ(Referebce Graph)๋ฅผ ๋ถ์ํ์ฌ ๋ฉ๋ชจ๋ฆฌ์์ ์ด๋ค ๊ฐ์ฒด๊ฐ ์ฐธ์กฐ๋๊ณ ์๋์ง ํ์ ํฉ๋๋ค.
- ์ฐธ์กฐ๋์ง ์๋ ๊ฐ์ฒด(Unreachable Object), Garbage๋ฅผ ์ฐพ์ ์ ๊ฑฐํ๊ณ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํฉ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ์กฐ๊ฐํ(Fragmentation)๋ฅผ ์ค์ด๊ธฐ ์ํด ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ถ(Heap Compaction)ํฉ๋๋ค.
๐ก๋ฉ๋ชจ๋ฆฌ ์กฐ๊ฐํ(Fragmentation)
GC๊ฐ Garbage(๋ ์ด์ ์ฐธ์กฐ๋์ง ์๋ ๊ฐ์ฒด)๋ฅผ ์ ๊ฑฐํ๋ฉด, ํ ๋ฉ๋ชจ๋ฆฌ์๋ ๋น์ด ์๋ ๊ณต๊ฐ์ด ์๊น๋๋ค. ์ด๋ ๋น ๊ณต๊ฐ๋ค์ ์ฐ์์ ์ด์ง ์์ ์ ์์ต๋๋ค. ์์ ๋น ๊ณต๊ฐ๋ค์ด ์ฌ๊ธฐ์ ๊ธฐ ํฉ์ด์ ธ ์์ผ๋ฉด ์๋ก์ด ๊ฐ์ฒด๋ฅผ ํ ๋นํ ๋ ๋นํจ์จ์ ์ ๋๋ค.
์ด๊ฒ์ด ๋ฐ๋ก ๋ฉ๋ชจ๋ฆฌ ์กฐ๊ฐํ์ ๋๋ค.
๐กํ ์์ถ(Compaction, Defragmentation)
์ฐ์๋ ๊ณต๊ฐ์ด ๋ถ์กฑํ ๊ฒฝ์ฐ ์์ ๊ฐ์ฒด๋ ํ ๋นํ ์ ์์ง๋ง ํฐ ๊ฐ์ฒด๋ฅผ ํ ๋นํ ์ ์๋ ์ํฉ์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
ํ ์์ถ์ ๋จ์์๋ ๊ฐ์ฒด๋ค์ ํ์ชฝ์ผ๋ก ๋ฐ์ด๋ถ์ฌ์ ์ฐ์๋ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ํ๋ณดํ๋ ๊ณผ์ ์ ๋๋ค. GC ์๊ณ ๋ฆฌ์ฆ์ ๋ฐ๋ผ ์ํ ์ฌ๋ถ๊ฐ ๋ค๋ฅธ๋ฐ, ๊ธฐ๋ณธ์ ์ผ๋ก Mark-and-Sweep ์๊ณ ๋ฆฌ์ฆ์ ์ ์ธํ ๋ชจ๋ ์๊ณ ๋ฆฌ์ฆ์ ํ ์์ถ์ ์ํํฉ๋๋ค.
์๋๋ก์ด๋์์ ์ฌ์ฉํ๋ GC์ ์ข ๋ฅ๋ก Partial GC, Full GC, Concurrent GC๊ฐ ์์ต๋๋ค.
Partial GC
- ์ฑ์ ํน์ ์์ญ๋ง ์ค์บํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํ๋ค.
- ์ฑ ์ฑ๋ฅ์ ๋ฏธ์น๋ ์ํฅ์ ์ต์ํํ๋ค.
Full GC
- ์ ์ฒด ํ์ ์ค์บํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํ๋ค.
- ์ฑ๋ฅ์ ๋ ํฐ ์ํฅ์ ๋ฏธ์น ์ ์๋ค.
Concurrent GC
- ์ ํ๋ฆฌ์ผ์ด์ ์ค๋ ๋์ ๋ณ๋ ฌ๋ก ์คํ๋์ด, ์ ํ๋ฆฌ์ผ์ด์ ์ค๋จ ์๊ฐ์ ์ค์ธ๋ค.
GC์ ์ฅ๋จ์ ์ ์ ๋ฆฌํ์๋ฉด,
์ฅ์
- ์๋์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ์ฌ ๊ฐ๋ฐ์๊ฐ ๋ฉ๋ชจ๋ฆฌ ํด์ ์ ๊ด์ฌํ์ง ์์๋ ๋จ
- ๋ฉ๋ชจ๋ฆฌ ๋์(Memory Leak) ๊ฐ๋ฅ์ฑ์ด ๊ฐ์
- ์ฐธ์กฐ๋์ง ์์ ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ํ์ํ์ฌ ์ฑ์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋๋ก ํจ
- ๋ณต์กํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ถ์ํํ์ฌ ๊ฐ๋ฐ ์๋ ๋์
๋จ์
- GC๊ฐ ์คํ๋๋ ๋์ ์ฑ์ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์ ์ ๋ฉ์ถ ์ ์์ (Pause Time)
- ํนํ Full GC๋ UI ๋ ๊ณผ ๊ฐ์ ๋ฌธ์ ๋ฅผ ์ผ๊ธฐํ ์ ์์
- GC๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ ์ดํ ์ ์์ผ๋ฏ๋ก ์คํ ํ์ด๋ฐ์ ์์ธกํ๊ธฐ ์ด๋ ค์ฐ๋ฉฐ, ์ด๋ก ์ธํด ์ฑ๋ฅ ์ต์ ํ๊ฐ ์ด๋ ค์ธ ์ ์์
- GC ์์ฒด๋ ์์คํ ๋ฆฌ์์ค๋ฅผ ์ฌ์ฉํ๋ฏ๋ก, ๋น๋ฒํ GC ์คํ์ ๋ฐฐํฐ๋ฆฌ ์๋ชจ์ ์ฑ๋ฅ ์ ํ๋ฅผ ์ด๋ํจ
Out-Of-Memory(OOM) Killer
์๋๋ก์ด๋์ OOM Killer๋ Linux ์ปค๋์ ๊ธฐ๋ฅ ์ค ํ๋๋ก, ์์คํ ์ ์ฒด์ ์์ ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ค๊ณ๋์์ต๋๋ค.
OOM Killer๋ ์์คํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํด์ง ๋ ์๋์ผ๋ก ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณดํ๋ ์ญํ ์ ์ํํฉ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ํ์ ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ฃผ๋ก ๋ง์ ์ฑ์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋๊ฑฐ๋, ํ๋์ ์ฑ์ด ๊ณผ๋ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ์ด ๋ฐ์ํฉ๋๋ค.
- ์์คํ ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ ๋ OOM Killer๋ฅผ ํธ์ถํฉ๋๋ค.
- ๋ฐฉ์์ ๋ฐ๋ผ ํ๋ก์ธ์ค๋ฅผ ์ข
๋ฃํฉ๋๋ค.
- ์ฐ์ ์์์ ๋ฐ๋ผ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํฉ๋๋ค.
- Linux ์ปค๋์ด ๊ฐ ํ๋ก์ธ์ค์ OOM ์ ์๋ฅผ ๋ถ์ฌํ์ฌ ์ ์๊ฐ ๊ฐ์ฅ ๋์ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํฉ๋๋ค.
์ฐธ๊ณ ๋ก, ํ๋ก์ธ์ค ์ฐ์ ์์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Foreground Process : ํ์ฌ ํ๋ฉด์ ํ์๋ ์ฑ์ผ๋ก, ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ ์ข ๋ฃ ๋์์ด ์๋๋ค.
- Background Process : ์ฌ์ฉ์๊ฐ ๋น์ฅ ํ์ํ์ง ์์ ์ฑ์ผ๋ก, ์ข ๋ฃ ์ฐ์ ์์๊ฐ ๋๋ค.
- Empty Process : ๋จ์ํ ์คํ ๋๊ธฐ ์ํ์ธ ํ๋ก์ธ์ค๋ก, ๊ฐ์ฅ ๋จผ์ ์ข ๋ฃ๋๋ค.
๊ด๋ จ ๋ด์ฉ์ ์ด์ ๊ธ์ ์ฐธ๊ณ ๋ถํ๋๋ฆฝ๋๋ค.
OOM Killer์ ์ฅ๋จ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ฅ์
- ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ถ์กฑํ ์ํฉ์์๋ ์์คํ ์ ์ฒด๊ฐ ๋ฉ์ถ์ง ์๊ณ ๋์ํ๋๋ก ์์ ์ฑ์ ๋ณด์ฅ
- ๋ถํ์ํ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ๋ณด, ์ค์ํ ํ๋ก์ธ์ค๊ฐ ์ํํ ๋์ํ ์ ์๋๋ก ํจ
- ๊ฐ๋ฐ์๊ฐ ์ง์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์ ๊ฐ์ ํ์ง ์์๋ ์์คํ ์ด ์ด๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌ
๋จ์
- ์ฌ์ฉ์์๊ฒ ๊ฐ์์ค๋ฌ์ด ์ฑ ๊ฐ์ ์ข ๋ฃ๋ฅผ ๊ฒฝํํ๊ฒ ํ ์ ์์
- ์ฑ์ด ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ๋๋ฉด ์ ์ฅ๋์ง ์์ ๋ฐ์ดํฐ๊ฐ ์์ค๋ ๊ฐ๋ฅ์ฑ
- ๋ฐฑ๊ทธ๋ผ์ด๋ ์ฑ์ด ์ข ๋ฃ๋์ด ์ฌ์ฉ์๊ฐ ๋ค์ ์คํํ๋ ๋ถํธํจ์ผ๋ก ์ฌ์ฉ์ ๊ฒฝํ์ด ์ฝํ๋ ์ ์์
์ต์ข
์ ์ผ๋ก GC์ OOM Killer๋ฅผ ๋น๊ตํ์๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Garbage Collation (GC) | Out-Of-Memoty (OOM) Killer | |
์ญํ | ์ฑ์ ๋ฉ๋ชจ๋ฆฌ ๋์๋ฅผ ๋ฐฉ์งํ๊ณ , ์ฌ์ฉํ์ง ์๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ | ์์คํ ์ ์ฒด์ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ํฉ์์ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํ์ฌ ๋ฉ๋ชจ๋ฆฌ ํ๋ณด |
๋์ ๋ฒ์ | ์ฑ ๋ด๋ถ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ (Java/Kotlin ๋ฉ๋ชจ๋ฆฌ) | ์์คํ ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ (์ฑ ํ๋ก์ธ์ค ๋ ๋ฒจ) |
๋์ ๋ฐฉ์ | ๊ฐ์ฒด์ ์ฐธ์กฐ ์ฌ๋ถ๋ฅผ ๊ฒ์ฌํ์ฌ ๋ฉ๋ชจ๋ฆฌ ํ์ | ํ๋ก์ธ์ค ์ฐ์ ์์์ OOM ์ ์์ ๋ฐ๋ผ ํ๋ก์ธ์ค ์ข ๋ฃ |
์ํฅ | ์ฑ ์ฑ๋ฅ์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์นจ | ์์คํ ์์ ์ฑ์ ์ ์งํ์ง๋ง, ์ข ๋ฃ๋ ์ฑ์ ๋ฐ์ดํฐ ์์ค ๊ฐ๋ฅ์ฑ |
์ฃผ์ ๋จ์ | GC Pause Time์ผ๋ก ์ธํ UI ์ง์ฐ ๊ฐ๋ฅ์ฑ | ์ค์ํ ์ฑ์ด ์ข ๋ฃ๋๋ฉด ์ฌ์ฉ์ ๊ฒฝํ์ด ์ ํ๋ ๊ฐ๋ฅ์ฑ |
์๋๋ก์ด๋ ๊ฐ๋ฐ์ ๋ก๋๋งต์ ๋ฐ๋ผ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.
'๐ป Programming > Android Developer AtoZ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Android] App Components (3) - Service ์๋ฒฝ ๊ฐ์ด๋ (1) | 2025.03.19 |
---|---|
[Android] App Components (2) - Activity ์๋ฒฝ ๊ฐ์ด๋ (1) | 2025.03.05 |
[Android] App Components (1) - ์๋๋ก์ด๋ 4๋ ์ปดํฌ๋ํธ (0) | 2025.02.28 |
[Android] Operating System (1) - File Permission, Multi-User Linux, Resource Isolations, Process Management (0) | 2025.02.21 |
[Android] APK์ AAB (1) | 2025.02.20 |