header-img
Info :

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๋ฐฐ ์ •๋„์˜ ์„ฑ๋Šฅ ๊ฐœ์„ 
      ๋ฐฐํ„ฐ๋ฆฌ ์†Œ๋ชจ๊ฐ€ ๋งŽ์•„์ง, ํ•œ ๋ฒˆ์— ์ฝ๋Š” ๋ฐฉ์‹์ด๋ผ ํ™”๋ฉด ์ „ํ™˜ ์‹œ ์†๋„๊ฐ€ ๋Š๋ฆผ

 

์ž๋ฐ” Garbage Collector ๋™์ž‘ ๋ฐฉ์‹?

์ž๋ฐ”์˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋Š” ์—ฌ๋Ÿฌ ์ข…๋ฅ˜๊ฐ€ ์žˆ์ง€๋งŒ ๊ณตํ†ต์ ์œผ๋กœ ๋‘ ๊ฐ€์ง€์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•จ

  1. ํž™ ๋‚ด์˜ ๊ฐ์ฒด ์ค‘ Garbage๋ฅผ ์ฐพ์•„๋ƒ„
  2. ์ฐพ์•„๋‚ธ 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๋กœ ๋‚˜๋ˆ”.

  1. Young generation : ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑํ•œ ๊ฐ์ฒด์˜ ๋Œ€๋ถ€๋ถ„์ด ์—ฌ๊ธฐ์— ์œ„์น˜ํ•จ. ๊ฐ€๋“์ฐจ๊ฒŒ ๋˜๋ฉด minor garbage collection์ด ์ผ์–ด๋‚˜๊ฒŒ ๋จ. ๋Œ€๋ถ€๋ถ„ ๊ฐ์ฒด๊ฐ€ ๊ธˆ๋ฐฉ ์‚ฌ๋ผ์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ๊ฐ์ฒด๊ฐ€ ์ด ์˜์—ญ์—์„œ ์‚ฌ๋ผ์ง.
  2. Old generation : ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ ์ƒํƒœ๊ฐ€ ๋˜์ง€ ์•Š๊ณ  Young ์˜์—ญ์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์ด ๋ณต์‚ฌ๊ฐ€ ๋จ. Young ์˜์—ญ๋ณด๋‹ค ํฌ๊ธฐ๊ฐ€ ํฌ๊ณ  GC๋Š” ์ ๊ฒŒ ๋ฐœ์ƒํ•จ. ์ด ์˜์—ญ์—์„œ ๊ฐ์ฒด๊ฐ€ ์‚ฌ๋ผ์งˆ ๋•Œ Major GC๋ผ๊ณ  ํ•จ.
  3. 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
๋”๋ณด๊ธฐ
CS/Android, Kotlin