Garbage Collection ๐Ÿšฎ

์—ฐ์ˆ˜ยท2021๋…„ 11์›” 14์ผ
0

java

๋ชฉ๋ก ๋ณด๊ธฐ
1/1

Java๋Š” ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•˜์—ฌ ํ•ด์ œํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ null๋กœ ์ง€์ •ํ•˜๊ฑฐ๋‚˜ System.gc() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์„ ์ง€์–‘ํ•ด์•ผ ํ•œ๋‹ค. ํŠนํžˆ, System.gc()๋Š” ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ์— ๋งค์šฐ ํฐ ์˜ํ–ฅ์„ ๋ผ์น˜๋ฏ€๋กœ ์ ˆ๋Œ€๋กœ ์‚ฌ์šฉํ•ด์„  ์•ˆ ๋œ๋‹ค.

๋”ฐ๋ผ์„œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๋” ์ด์ƒ ํ•„์š” ์—†๋Š” ์“ฐ๋ ˆ๊ธฐ ๊ฐ์ฒด๋ฅผ ์ฐพ์•„ ์ง€์šฐ๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋Š” ์•„๋ž˜ ๋‘ ๊ฐ€์ง€ ์ „์ œ ์กฐ๊ฑด ํ•˜์— ๋งŒ๋“ค์–ด์กŒ๋‹ค.

  • ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๋Š” ๊ธˆ๋ฐฉ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ(unreachable) ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.
  • ์˜ค๋ž˜๋œ ๊ฐ์ฒด์—์„œ ์ Š์€ ๊ฐ์ฒด๋กœ์˜ ์ฐธ์กฐ๋Š” ์•„์ฃผ ์ ๊ฒŒ ์กด์žฌํ•œ๋‹ค.

โœ… Minor GC

  • Young ์˜์—ญ์—์„œ ์ผ์–ด๋‚˜๋Š” GC
  • ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๋Š” Eden ์˜์—ญ์— ์œ„์น˜
  • Eden ์˜์—ญ์—์„œ GC๊ฐ€ ํ•œ ๋ฒˆ ๋ฐœ์ƒํ•œ ํ›„ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” Survivor ์˜์—ญ ์ค‘ ํ•˜๋‚˜๋กœ ์ด๋™
  • ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋‹ค๊ฐ€ ๊ณ„์†ํ•ด์„œ ์‚ด์•„๋‚จ์•„ ์žˆ๋Š” ๊ฐ์ฒด๋Š” ์ผ์ •์‹œ๊ฐ„ ์ฐธ์กฐ๋˜๊ณ  ์žˆ๋‹ค๋Š” ๋œป์ด๋ฏ€๋กœ Old ์˜์—ญ์œผ๋กœ ์ด๋™

โœ… Major(Full) GC

  • Old ์˜์—ญ์— ์žˆ๋Š” ๋ชจ๋“  ๊ฐ์ฒด๋“ค์„ ๊ฒ€์‚ฌํ•˜์—ฌ ์ฐธ์กฐ๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋“ค์„ ํ•œ๊บผ๋ฒˆ์— ์‚ญ์ œ
  • ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ  ์‹คํ–‰ ์ค‘ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ •์ง€๋œ๋‹ค. โ†’ stop-the-world
  • GC๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ์Šค๋ ˆ๋“œ(์‹คํ–‰ ์ค‘ ํ”„๋กœ์„ธ์Šค)๊ฐ€ ์ •์ง€๋œ๋‹ค. GC ์ž‘์—…์„ ์™„๋ฃŒํ•œ ์ดํ›„์— ์ค‘๋‹จํ–ˆ๋˜ ์ž‘์—…์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•œ๋‹ค.
  • GC ํŠœ๋‹ : stop-the-world ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ๊ฒƒ

ย 

โœ… GC๋Š” ์–ด๋–ค ์›๋ฆฌ๋กœ ์†Œ๋ฉธ์‹œํ‚ฌ ๋Œ€์ƒ์„ ์„ ์ •ํ•˜๋Š”๊ฐ€?

  • Garbage Collector๊ฐ€ ํž™ ๋‚ด์˜ ๊ฐ์ฒด ์ค‘ ๊ฐ€๋น„์ง€(Garbage)๋ฅผ ์ฐพ์•„๋‚ด๊ณ  ์ฐพ์•„๋‚ธ ๊ฐ€๋น„์ง€๋ฅผ ์ฒ˜๋ฆฌํ•ด์„œ ํž™์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšŒ์ˆ˜ํ•œ๋‹ค.
  • ์ฐธ์กฐ๋˜๊ณ  ์žˆ์ง€ ์•Š์€ ๊ฐ์ฒด(instance)๋ฅผ ๊ฐ€๋น„์ง€๋ผ๊ณ  ํ•˜๋ฉฐ, ๊ฐ์ฒด๊ฐ€ ๊ฐ€๋น„์ง€์ธ์ง€ ์•„๋‹Œ์ง€ ํŒ๋‹จํ•˜๊ธฐ ์œ„ํ•ด์„œ reachability๋ผ๋Š” ๊ฐœ๋…์„ ์‚ฌ์šฉํ•œ๋‹ค
    • reachability: ์–ด๋–ค ํž™ ์˜์—ญ์— ํ• ๋‹น๋œ ๊ฐ์ฒด๊ฐ€ ์œ ํšจํ•œ ์ฐธ์กฐ๊ฐ€ ์žˆ๋‹ค
    • unreachability: ๊ทธ๋ ‡์ง€ ์•Š๋‹ค
  • ํ•œ ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋ฉด์„œ ์ฐธ์กฐ ์‚ฌ์Šฌ์ด ํ˜•์„ฑ๋˜๋Š”๋ฐ, ์ด ์ค‘ ์ตœ์ดˆ์— ์ฐธ์กฐํ•œ ๊ฒƒ์„ Root Set์ด๋ผ๊ณ  ํ•œ๋‹ค.
  • ํž™ ์˜์—ญ์— ์žˆ๋Š” ๊ฐ์ฒด๋“ค์€ ์ด 4๊ฐ€์ง€ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ํ•˜๊ฒŒ ๋œ๋‹ค. 2, 3, 4๋Š” Root Set์ด๋‹ค.
    1. ํž™ ๋‚ด์˜ ๋‹ค๋ฅธ ๊ฐ์ฒด์— ์˜ํ•œ ์ฐธ์กฐ
    2. Java ์Šคํƒ, ์ฆ‰ Java ๋ฉ”์„œ๋“œ ์‹คํ–‰ ์‹œ ์‚ฌ์šฉํ•˜๋Š” ์ง€์—ญ๋ณ€์ˆ˜์™€ ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค์— ์˜ํ•œ ์ฐธ์กฐ
    3. ๋„ค์ดํ‹ฐ๋ธŒ ์Šคํƒ์— ์˜ํ•ด ์ƒ์„ฑ๋œ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ
    4. ๋ฉ”์„œ๋“œ ์˜์—ญ์˜ ์ •์  ๋ณ€์ˆ˜์— ์˜ํ•œ ์ฐธ์กฐ

  • ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์‹คํ–‰ ํƒ€์ด๋ฐ์€ ๋ณ„๋„์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ณ„์‚ฐ์ด ๋œ๋‹ค

ย 

โœ… GC ์•Œ๊ณ ๋ฆฌ์ฆ˜

๐Ÿ‘‰ Serial GC

  • ๋ฉ”๋ชจ๋ฆฌ์™€ CPU ์ฝ”์–ด ๊ฐœ์ˆ˜๊ฐ€ ์ ์„ ๋•Œ ์ ํ•ฉํ•œ ๋ฐฉ์‹
  • Young ์˜์—ญ โ†’ Minor GC ๋ฐฉ์‹
  • Old ์˜์—ญ โ†’ mark-sweep-compact
    1. Old ์˜์—ญ์— ์‚ด์•„ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์‹๋ณ„(Mark)
    2. ํž™์˜ ์•ž ๋ถ€๋ถ„๋ถ€ํ„ฐ ํ™•์ธํ•˜์—ฌ ์‚ด์•„ ์žˆ๋Š” ๊ฐ์ฒด๋งŒ ๋‚จ๊ธด๋‹ค. (Sweep)
    3. ๊ฐ ๊ฐ์ฒด๋“ค์ด ์—ฐ์†๋˜๊ฒŒ ์Œ“์ด๋„๋ก ํž™์˜ ๊ฐ€์žฅ ์•ž ๋ถ€๋ถ„๋ถ€ํ„ฐ ์ฑ„์›Œ ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š” ๋ถ€๋ถ„๊ณผ ๊ฐ์ฒด๊ฐ€ ์—†๋Š” ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆˆ๋‹ค. (Compaction)

๐Ÿ‘‰ Parallel GC (Throughput GC)

  • Serial GC์™€ ๊ธฐ๋ณธ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฐ™์ง€๋งŒ, GC๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์“ฐ๋ ˆ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ด๋‹ค.
  • Serial GC๋ณด๋‹ค ๋น ๋ฅด๊ฒŒ ๊ฐ์ฒด๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ถฉ๋ถ„ํ•˜๊ณ  ์ฝ”์–ด์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์„ ๋•Œ ์ ํ•ฉํ•˜๋‹ค.

๐Ÿ‘‰ Parallel Old GC (Parallel Compacting GC)

  • Parallel GC์—์„œ Old ์˜์—ญ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜๋งŒ ๋‹ค๋ฅธ ๋ฐฉ์‹ โ†’ mark-summary-compaction
  • Summary : ๋ณ„๋„๋กœ ์‚ด์•„์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉฐ, ๋ณด๋‹ค ๋ณต์žกํ•œ ๋‹จ๊ณ„๋กœ ์ˆ˜ํ–‰๋œ๋‹ค.

๐Ÿ‘‰ Concurrent Mark & Sweep GC (CMS, Low Latency GC)

  • stop-the-world ์‹œ๊ฐ„์ด ๋งค์šฐ ์งง๋‹ค.
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‘๋‹ต ์†๋„๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๊ณผ์ •
    1. Initial Mark : ํด๋ž˜์Šค ๋กœ๋”์—์„œ ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฐ์ฒด ์ค‘ ์‚ด์•„ ์žˆ๋Š” ๊ฐ์ฒด๋งŒ ์‹๋ณ„
    2. Concurrent Mark : ๋ฐฉ๊ธˆ ์‚ด์•„ ์žˆ๋‹ค๊ณ  ํ™•์ธํ•œ ๊ฐ์ฒด์—์„œ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋“ค์„ ๋”ฐ๋ผ๊ฐ€๋ฉฐ ํ™•์ธ. ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰ ์ค‘์ธ ์ƒํƒœ์—์„œ ๋™์‹œ์— ์ง„ํ–‰๋œ๋‹ค!
    3. Remark: concurrent mark ๋‹จ๊ณ„์—์„œ ์ƒˆ๋กœ ์ถ”๊ฐ€๋˜๊ฑฐ๋‚˜ ์ฐธ์กฐ๊ฐ€ ๋Š๊ธด ๊ฐ์ฒด๋ฅผ ํ™•์ธ
    4. Concurrent Sweep: ์“ฐ๋ ˆ๊ธฐ ์ •๋ฆฌ. ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ง„ํ–‰๋˜๊ณ  ์žˆ๋Š” ์ƒํ™ฉ์—์„œ ์ง„ํ–‰
  • ๋‹จ์ 
    • ๋ฉ”๋ชจ๋ฆฌ์™€ CPU๋ฅผ ๋งŽ์ด ์‚ฌ์šฉ
    • Compaction ๋‹จ๊ณ„๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜์ง€ ์•Š๋Š”๋‹ค.

๐Ÿ‘‰ G1 (Garbage First) GC

  • ๋ฐ”๋‘‘ํŒ์˜ ๊ฐ ์˜์—ญ์— ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๊ณ  GC๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
  • ํ•ด๋‹น ์˜์—ญ์ด ๊ฝ‰ ์ฐจ๋ฉด ๋‹ค๋ฅธ ์˜์—ญ์—์„œ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๊ณ  GC๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
  • ์ฆ‰, Young ์˜์—ญ์—์„œ Old์˜์—ญ์œผ๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ด๋™ํ•˜๋Š” ๋‹จ๊ณ„๊ฐ€ ์‚ฌ๋ผ์ง„ ๋ฐฉ์‹์ด๋‹ค.
  • ๊ฐ€์žฅ ๋น ๋ฅธ GC ๋ฐฉ์‹

ย 

[์ถœ์ฒ˜]

https://d2.naver.com/helloworld/1329

https://asfirstalways.tistory.com/159

0๊ฐœ์˜ ๋Œ“๊ธ€