Android
- Linux ๊ธฐ๋ฐ
- ART(Android Runtime)์ด java๋ก ๋์๊ฐ๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ฐ๋ ๋ Java ๋ฐฉ์์ ์ฌ์ฉ
ART?
- ART๋ Android 5.0 (API ๋ ๋ฒจ 21) ์ด์์ด ์คํ๋๋ ๊ธฐ๊ธฐ์ ๊ธฐ๋ณธ ๋ฐํ์. ์ด ๋ฐํ์์ Android ํ๋ซํผ๊ณผ ์ฑ์ ์ฑ๋ฅ, ์ ์ฐ์ฑ์ ๊ฐ์ ํ๋ ์๋ง์ ๊ธฐ๋ฅ์ ์ ๊ณต. ์๋๋ก์ด๋์์ ์ฌ์ฉ๋๋ Dalvik VM์ ํ๊ณ์ ์ ๊ทน๋ณตํ๊ธฐ ์ํด ์๋ก ๊ฐ๋ฐ๋ ๋ฐํ์
- ART์ ๊ธฐ๋ฅ ์ค ํ๋์ธ ๊ฐ๋น์ง ์ปฌ๋ ์
(GC) ๊ฐ์
GC๋ ๋ฆฌ์์ค ์ง์ฝ์ ์ด๋ฏ๋ก ์ฑ ์ฑ๋ฅ์ ์ ํ์์ผ ํ๋ฉด ๋๊น, UI ์๋ต์ฑ ๋ถ์กฑ ๋ฑ์ ๋ฌธ์ ๊ฐ ์ผ์ด๋จ. ART์์๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋ฐ ์กฐ๊ฐํ๋ฅผ ์ค์ด๊ธฐ ์ํ ๋์ ๋ณต์ฌ, ๋จ์ผ GC ์ผ์์ค์ง๊ฐ ์๋ ๋์ ์คํ ์ค๊ณ… ๋ฑ์ ๋ฐฉ๋ฒ์ผ๋ก GC๋ฅผ ๊ฐ์ - ART ๋ฐฉ์?
machine ์์์ AOT ํ์ผ์ ๋๋ฆฌ๋ ๋ฐฉ์์
์ฑ์ ์ค์นํ ๋ ์์ ํ Machine code๋ก ๋ณํ๋์ด ์ค์น๋จ (AOT, Ahead-Of-Time ์ปดํ์ผ)
์ฅ์ ์ ์ฝ๋ Interpret, JIT compile ์๊ฐ์ ์ ๊ฑฐํ์ฌ performance ํฅ์์ด์ง๋ง ๋จ์ ์ ์ค์น ์์ ์ ์์ค ์ฝ๋๋ฅผ ๋ฒ์ญํ๊ธฐ์ ์ค์น๊ฐ ๋๋ฆฌ๊ณ ํ์ผ์ ๋ฐ๋ก ์ ์ฅํ๊ธฐ์ ์ฉ๋์ด ์ปค์ง๊ฒ ๋จ- AOT Compiler?
ํ๋ก๊ทธ๋จ ์ค์น ์ ์ปดํ์ผ๋ฌ๋ฅผ ์ ์ธํ ์์ค์ฝ๋๋ฅผ ๋ก๋
์ถ๊ฐ ์ปดํ์ผ ์์ ์์ด ๋ฐ๋ก ์คํ์ด ๊ฐ๋ฅํจ
์ฌ์ฉ์์ ๋๊ธฐ ์๊ฐ์ด ๊ฑฐ์ ์์
์ค์น ์ ์ปดํ์ผ ๋ ํ์ผ์ ๋ฐ๋ก ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ํ๋ก๊ทธ๋จ ํฌ๊ธฐ๊ฐ ์ฆ๊ฐ - JIT compiler
์ค๊ฐ ์ธ์ด(bytecode)๋ฅผ ์ฝ์ง ์๊ณ ํ๋ก๊ทธ๋จ์ด ์คํ๋ ๋ ํ๊บผ๋ฒ์ ์ฝ์ด์ ๋ฒ์ญ์ ์งํํจ
์ธํฐํ๋ฆฌํฐ ๋ฐฉ์์ ๋นํด 10~20๋ฐฐ ์ ๋์ ์ฑ๋ฅ ๊ฐ์
๋ฐฐํฐ๋ฆฌ ์๋ชจ๊ฐ ๋ง์์ง, ํ ๋ฒ์ ์ฝ๋ ๋ฐฉ์์ด๋ผ ํ๋ฉด ์ ํ ์ ์๋๊ฐ ๋๋ฆผ
- AOT Compiler?
์๋ฐ Garbage Collector ๋์ ๋ฐฉ์?
์๋ฐ์ ๊ฐ๋น์ง ์ปฌ๋ ํฐ๋ ์ฌ๋ฌ ์ข ๋ฅ๊ฐ ์์ง๋ง ๊ณตํต์ ์ผ๋ก ๋ ๊ฐ์ง์ ์์ ์ ์ํํจ
- ํ ๋ด์ ๊ฐ์ฒด ์ค Garbage๋ฅผ ์ฐพ์๋
- ์ฐพ์๋ธ Garbage ๊ฐ์ฒด๋ฅผ ๋ฐํํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํจ
์ ๊ณผ์ ์ ์์ธํ ์ ์ผ๋ฉด ๋ค์๊ณผ ๊ฐ์. ๊ฐ์ฒด๋ค์ ์ผ๋จ ์์ฑ๋๋ฉด ํ ์์ญ์ ์์ฑ๋จ. ๊ทธ๋ฐ๋ฐ ํ์ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ์ ๋ ๊ณต๊ฐ์ด ๋ถ์กฑํ๋ค๋ฉด JVM์ Out of MemoryGC๋ฅผ ๋ฟ๋ฆฌ๊ฒ ๋จ GC๋ Root Set of References(์ ํจํ ์ต์ด์ ์ฐธ์กฐ)๊ฐ ์ด๋ฃจ์ด์ง์ง ์๋ Unrechable Objects๋ฅผ ์๊ฑฐํจ. GC๋ ์ด ๊ฐ์ฒด๋ค์ ๋ฉ๋ชจ๋ฆฌ์์ ์ ๊ฑฐํ๊ธฐ ์ ์ ํด๋น ๊ฐ์ฒด์ finalize() ๋ฉ์๋๋ฅผ ํธ์ถํจ.
์๋ฐ์ ์ด์ GC ๋ฐฉ์
1. Marking : ํ๋ก์ธ์ค๋ ๋งํน์ ํธ์ถํ์ฌ GC๊ฐ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ฌ์ฉ๋๋์ง ์๋์ง ์ฒดํฌํ๋ ๊ณผ์ . ์ฐธ์กฐ๋๋ ๊ฐ์ฒด๋ ํ๋์, ์ฐธ์กฐ๋์ง ์๋ ๊ฐ์ฒด๋ ์ฃผํฉ์์ผ๋ก ๋ณด์ฌ์ง ๋ชจ๋ ์ค๋ธ์ ํธ๋ ๋งํน ๋จ๊ณ์์ ์ค์บ๋จ → ๋ง์ ์๊ฐ์ ์๋ชจ
2. Normal Deletion : ์์์ ์น ํ ์ฐธ์กฐ๋์ง ์๋ ๊ฐ์ฒด์ธ ์ฃผํฉ์ ๋ถ๋ถ์ ๋ชจ๋ ์ ๊ฑฐํ๊ณ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฐํํจ. ๋ฉ๋ชจ๋ฆฌ Allocator๋ ๋ฐํ ํ ๋น ๋ธ๋ญ์ ์ฐธ์กฐ ์์น๋ฅผ ์ ์ฅํ ํ ์๋ก์ด ์ค๋ธ์ ํธ๊ฐ ์ ์ธ๋๋ฉด ๊ทธ ๋ถ๋ถ์ ํ ๋นํด์ค.
3. Compacting : ํผํฌ๋จผ์ค ํฅ์์ ์ํด ์ฐธ์กฐ๋์ง ์์ ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํ๊ณ ๋จ์ ์ฐธ์กฐ๋๊ณ ์๋ ๊ฐ์ฒด๋ค์ ๋ฌถ์์ด๋ค์ ๋ฌถ์ด์ ๊ณต๊ฐ์ด ์๊ธฐ๋ฏ๋ก ์๋ก์ด ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์ ๋ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ์งํํ ์ ์์
Generational Garbage Collection
๋ชจ๋ ๊ฐ์ฒด๋ฅผ Mark & Compactํ๋ JVM์ ๋นํจ์จ์ ์. ์ค๋ธ์ ํธ๋ฅผ ํ ๋นํ ๋๋ง๋ค GC ์๊ฐ์ ์ค๋ธ์ ํธ์ ๋ฆฌ์คํธ๋ฅผ ์ฝ๋ ์๊ฐ์ ์ ์ ๊ธธ์ด์ง. ๊ทธ๋ฌ๋ ๊ฒฝํ์ ๋ถ์์ ์ํ๋ฉด ๋๋ถ๋ถ์ ๊ฐ์ฒด๋ ์งง๊ฒ ์์กดํจ. (์๊ฐ์ด ์ง๋ ์๋ก ์ ์ ๊ฐ์ฒด๋ง ๋จ๊ฒ๋จ) ๋ฐ๋ผ์ ์๋์ ๊ฐ์ด Young, Old, Permanent๋ก ๋๋.
- Young generation : ์๋กญ๊ฒ ์์ฑํ ๊ฐ์ฒด์ ๋๋ถ๋ถ์ด ์ฌ๊ธฐ์ ์์นํจ. ๊ฐ๋์ฐจ๊ฒ ๋๋ฉด minor garbage collection์ด ์ผ์ด๋๊ฒ ๋จ. ๋๋ถ๋ถ ๊ฐ์ฒด๊ฐ ๊ธ๋ฐฉ ์ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ ๋ง์ ๊ฐ์ฒด๊ฐ ์ด ์์ญ์์ ์ฌ๋ผ์ง.
- Old generation : ์ ๊ทผ ๋ถ๊ฐ๋ฅ ์ํ๊ฐ ๋์ง ์๊ณ Young ์์ญ์์ ์ด์๋จ์ ๊ฐ์ฒด๋ค์ด ๋ณต์ฌ๊ฐ ๋จ. Young ์์ญ๋ณด๋ค ํฌ๊ธฐ๊ฐ ํฌ๊ณ GC๋ ์ ๊ฒ ๋ฐ์ํจ. ์ด ์์ญ์์ ๊ฐ์ฒด๊ฐ ์ฌ๋ผ์ง ๋ Major GC๋ผ๊ณ ํจ.
- Permanent generation : Method Area๋ผ๊ณ ๋ ํจ. JVM์ด ํด๋์ค๋ค๊ณผ ๋ฉ์๋๋ค์ ์ค๋ช ํ๊ธฐ ์ํด ํ์ํ ๋ฉํ ๋ฐ์ดํฐ๋ค์ ํฌํจํ๊ณ ์์.
Generational Garbage Collection ๋์ ๊ณผ์
์ด๋ฏธ์ง | ์ค๋ช |
1. ์ด๋ ํ ์๋ก์ด ์ค๋ธ์ ํธ๊ฐ ๋ค์ด์ค๋ฉด Eden Space์ ํ ๋นํจ | |
2. Eden space๊ฐ ๊ฐ๋์ฐจ๋ฉด minor garbage collection์ด ์์๋จ | |
3. ์ฐธ์กฐ๋๋ ์ค๋ธ์ ํธ๋ค์ ์ฒซ ๋ฒ์งธ survivor(s0)๋ก ์ด๋๋๊ณ ๋น ์ฐธ์กฐ ๊ฐ์ฒด๋ Eden space๊ฐ clear๋ ๋ ๋ฐํํจ | |
4. ๋ค์ minor GC ๋ Eden Space์์๋ ๊ฐ์ ์ผ์ด ์ผ์ด๋จ. ๋น ์ฐธ์กฐ ๊ฐ์ฒด๋ ์ญ์ ๋๊ณ ์ฐธ์กฐ ๊ฐ์ฒด๋ survivor space๋ก ์ด๋. ๊ทธ๋ฌ๋ ์ด ๋ ๋ฒ์งธ์ minor GC ๋ ์ฐธ์กฐ ๊ฐ์ฒด๋ค์ ๋ ๋ฒ์งธ survivor space๋ก ์ด๋. ๊ทธ๋ฆฌ๊ณ ์ต๊ทผ minor GC์์ ์ฒซ ๋ฒ์งธ survivor space๋ก ์ด๋๋ ๊ฐ์ฒด๋ค์ age๋ ์ฆ๊ฐํ๊ณ ๋ ๋ฒ์งธ survivor space๋ก ์ด๋ํ๊ฒ ๋จ ์ด๋ฐ ๊ณผ์ ์ด ๋๋๋ฉด s0, eden space๋ clear ๋จ. ๊ทธ๋ฆผ์ ๋ณด๋ฉด์ ์ดํดํ๋ฉด ์์ํจ. | |
5. ๋ค์ minor GC ๋๋ ๊ฐ์ ๊ณผ์ ์ด ๋ฐ์ํ๊ธฐ๋ ํจ. ๊ทธ๋ฌ๋ ์ด๋ฒ์ survivor space๊ฐ switch ๋จ. ์ฐธ์กฐ๋๋ ๊ฐ์ฒด๋ค์ s0๋ก ์ด๋ ์ด์๋จ์ ๊ฐ์ฒด๋ค์ ๋ค aged ๋จ. → ๋น์ทํ๊ฒ eden๊ณผ s1 space๋ clear ๋จ. | |
6. promotion ๊ณผ์ . minor GC ํ aged ์ค๋ธ์ ํธ๋ค์ด ์ผ์ ํ age threshold ๊ฐ์ ๋๊ฒ ๋๋ฉด young generation์์ old๋ก promotion ๋์ด์ง. ์ด ์์์์๋ age threshold ๊ฐ์ด 8์. | |
7. minor GC๊ฐ ๊ณ์๋๊ณ ๊ฐ์ฒด๋ค์ด ์ ์ old generation์ผ๋ก ์ด๋ํจ. ์ด๋ฌ๋ค๊ฐ major GC๊ฐ ์ผ์ด๋๊ฒ ๋๋ฉด old generation์ space๋ clear ๋๊ณ ๊ณต๊ฐ์ด compactํด์ง๊ฒ ๋จ. |
'CS > Android, Kotlin' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Android] Custom View (0) | 2023.04.15 |
---|---|
[Android] Data Binding (0) | 2023.04.15 |
[Android] MVVM (0) | 2023.04.13 |
[Android] ์๋๋ก์ด๋ ๋ฆฌ์์ค (0) | 2023.04.07 |
๋ฒ์ ์ง์ ํจ์ (0) | 2022.12.01 |