๐Ÿ’ป [Theory] Java์˜ GC(Garbage Collection)

๐Ÿ’ป [Theory] Java์˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Garbage Collection)

์•ˆ๋…•ํ•˜์„ธ์š”. ๐Ÿ‘‹

์˜ค๋Š˜์€ Java์˜ GC(Garbage Collection)์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Garbage Collection)์ด๋ž€?

ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœ ํ•˜๋‹ค ๋ณด๋ฉด ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฉ”๋ชจ๋ฆฌ์ธ ๊ฐ€๋ฐ”์ง€(Garbage)๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค. C์–ธ์–ด๋ฅผ ์ด์šฉํ•˜๋ฉด free()๋ผ๋Š” ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ํ•˜์ง€๋งŒ Java๋‚˜ Kotlin ์„ ์ด์šฉํ•ด ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ๋ณด๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ง์ ‘ ํ•ด์ œํ•ด์ฃผ๋Š” ์ผ์ด ์—†๋‹ค. ๊ทธ ์ด์œ ๋Š” JVM์˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์•Œ์•„์„œ ์ •๋ฆฌํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋Œ€์‹  Java์—์„œ ๋ช…์‹œ์ ์œผ๋กœ ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ผ๋ฐ˜์ ์œผ๋กœ null์„ ์„ ์–ธํ•ด์ค€๋‹ค.

Minor GC์™€ Major GC

JVM์˜ Heap์˜์—ญ์€ ์ฒ˜์Œ ์„ค๊ณ„๋  ๋•Œ ๋‹ค์Œ์˜ โ€ป2๊ฐ€์ง€๋ฅผ ์ „์ œ(Weak Generational Hypothesis)๋กœ ์„ค๊ณ„๋˜์—ˆ๋‹ค.

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

์ฆ‰, ๊ฐ์ฒด๋Š” ๋Œ€๋ถ€๋ถ„ ์ผํšŒ์„ฑ๋˜๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ์— ์˜ค๋žซ๋™์•ˆ ๋‚จ์•„์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ๋“œ๋ฌผ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ์ฒด์˜ ์ƒ์กด ๊ธฐ๊ฐ„์— ๋”ฐ๋ผ ๋ฌผ๋ฆฌ์ ์ธ Heap ์˜์—ญ์„ ๋‚˜๋ˆ„๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ, ์ด์— ๋”ฐ๋ผ Young, Old ์ด 2๊ฐ€์ง€ ์˜์—ญ์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ๋‹ค. (์ดˆ๊ธฐ์—๋Š” Perm ์˜์—ญ์ด ์กด์žฌํ•˜์˜€์ง€๋งŒ Java8๋ถ€ํ„ฐ ์ œ๊ฑฐ๋˜์—ˆ๋‹ค.)

gc ์˜์—ญ ๋ฐ ํ๋ฆ„

gc-flow

Young ์˜์—ญ(Young Generation)

  • ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น(Allocation)๋˜๋Š” ์˜์—ญ
  • ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๊ฐ€ ๊ธˆ๋ฐฉ Unreachable ์ƒํƒœ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋งŽ์€ ๊ฐ์ฒด๊ฐ€ Young ์˜์—ญ์— ์ƒ์„ฑ๋˜์—ˆ๋‹ค๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค.
  • Young ์˜์—ญ์— ๋Œ€ํ•œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Garbage Collection)์„ Minor GC๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

Old ์˜์—ญ(Old Generation)

  • Young์˜์—ญ์—์„œ Reachable ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์—ฌ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๊ฐ€ ๋ณต์‚ฌ๋˜๋Š” ์˜์—ญ
  • ๋ณต์‚ฌ๋˜๋Š” ๊ณผ์ •์—์„œ ๋Œ€๋ถ€๋ถ„ Young ์˜์—ญ๋ณด๋‹ค ํฌ๊ฒŒ ํ• ๋‹น๋˜๋ฉฐ, ํฌ๊ธฐ๊ฐ€ ํฐ ๋งŒํผ ๊ฐ€๋น„์ง€๋Š” ์ ๊ฒŒ ๋ฐœ์ƒํ•œ๋‹ค.
  • Old ์˜์—ญ์— ๋Œ€ํ•œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Garbage Collection)์„ Major GC ๋˜๋Š” Full GC๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

์˜ˆ์™ธ์ ์ธ ์ƒํ™ฉ์œผ๋กœ Old ์˜์—ญ์— ์žˆ๋Š” ๊ฐ์ฒด๊ฐ€ Young ์˜์—ญ์˜ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์กด์žฌํ•  ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ Old ์˜์—ญ์—๋Š” 512 bytes์˜ ๋ฉ์–ด๋ฆฌ(Chunk)๋กœ ๋˜์–ด ์žˆ๋Š” ์นด๋“œ ํ…Œ์ด๋ธ”(Card Table)์ด ์กด์žฌํ•œ๋‹ค.

card-table

์นด๋“œ ํ…Œ์ด๋ธ”์—๋Š” Old ์˜์—ญ์— ์žˆ๋Š” ๊ฐ์ฒด๊ฐ€ Young ์˜์—ญ์˜ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•  ๋•Œ ๋งˆ๋‹ค ๊ทธ์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ํ‘œ์‹œ๋œ๋‹ค. ์นด๋“œ ํ…Œ์ด๋ธ”์ด ๋„์ž…๋œ ์ด์œ ๋Š” ๊ฐ„๋‹จํ•œ๋‹ค. Young ์˜์—ญ์—์„œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Minor GC)๊ฐ€ ์‹คํ–‰๋  ๋•Œ ๋ชจ๋“  Old ์˜์—ญ์— ์กด์žฌํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” Young ์˜์—ญ์˜ ๊ฐ์ฒด๋ฅผ ์‹๋ณ„ํ•˜๋Š” ๊ฒƒ์ด ๋น„ํšจ์œจ์ ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Young ์˜์—ญ์—์„œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ์ง„ํ–‰๋  ๋•Œ ์นด๋“œ ํ…Œ์ด๋ธ”๋งŒ ์กฐํšŒํ•˜์—ฌ GC์˜ ๋Œ€์ƒ์ธ์ง€ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ  ์žˆ๋‹ค.

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Garbage Collection)์˜ ๋™์ž‘ ๋ฐฉ์‹

Young ์˜์—ญ๊ณผ Old ์˜์—ญ์€ ์„œ๋กœ ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์„ธ๋ถ€์ ์ธ ๋™์ž‘ ๋ฐฉ์‹์€ ๋‹ค๋ฅด๋‹ค. ํ•˜์ง€๋งŒ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ์‹คํ–‰๋œ๋‹ค๊ณ  ํ•˜๋ฉด ๋‹ค์Œ์˜ 2๊ฐ€์ง€ ๊ณตํ†ต์ ์ธ ๋‹จ๊ณ„๋ฅผ ๋”ฐ๋ฅด๊ฒŒ ๋œ๋‹ค.

  • Stop The World
  • Mark and Sweep

์ถ”๊ฐ€๋กœ โ€˜Compactโ€™ ๋ผ๋Š” โ€˜Sweepโ€™ ํ›„ ๋ถ„์‚ฐ๋˜์–ด์žˆ๋Š” ๊ฐ์ฒด๋“ค์„ Heap์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋กœ ๋ชจ์•„ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋œ ๋ถ€๋ถ„๊ณผ ๊ทธ๋ ‡์ง€ ์•Š์€ ๋ถ€๋ถ„์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ณผ์ •์ด ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Compact ๊ณผ์ •์€ ๊ธฐ๋ณธ์ ์œผ๋กœ โ€˜Stop The Worldโ€™๋ฅผ ์œ ๋ฐœํ•œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™”๋ฅผ ๋ฐฉ์ง€ํ•œ๋‹ค.

1. Stop The World

Stop The World๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด JVM์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰์„ ๋ฉˆ์ถ”๋Š” ์ž‘์—…์ด๋‹ค. GC๊ฐ€ ์‹คํ–‰๋  ๋•Œ๋Š” GC๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์“ฐ๋ ˆ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๋“ค์˜ ์ž‘์—…์ด ์ค‘๋‹จ๋˜๊ณ , GC๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ž‘์—…์ด ์žฌ๊ฐœ๋œ๋‹ค. ๋‹น์—ฐํžˆ ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๋“ค์˜ ์ž‘์—…์ด ์ค‘๋‹จ๋˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฉˆ์ถ”๊ธฐ ๋•Œ๋ฌธ์—, GC์˜ ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ์œ„ํ•ด ํŠœ๋‹์„ ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ๋ณดํ†ต stop-the-world ์˜ ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ์ž‘์—…์„ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋˜ํ•œ JVM์—์„œ๋„ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ์‹คํ–‰ ์˜ต์…˜์„ ์ œ๊ณตํ•˜๊ณ  ์žˆ๋‹ค.

2. Mark and Sweep

Mark: ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์™€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งˆํ‚น(์‹๋ณ„)ํ•˜๋Š” ์ž‘์—… Sweep: Mark ๋‹จ๊ณ„์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š์Œ์œผ๋กœ ์‹๋ณ„๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜๋Š” ์ž‘์—…

Stop The World๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ์ž‘์—…์„ ์ค‘๋‹จ์‹œํ‚ค๋ฉด, GC๋Š” ์Šคํƒ์˜ ๋ชจ๋“  ๋ณ€์ˆ˜ ๋˜๋Š” Reachable ๊ฐ์ฒด๋ฅผ ์Šค์บ”ํ•˜๋ฉด์„œ ๊ฐ๊ฐ์ด ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์ฐธ๊ณ ํ•˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ํƒ์ƒ‰ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‹๋ณ„ํ•˜๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ Mark๋ผ๊ณ  ํ•œ๋‹ค. ์ดํ›„์— Mark๊ฐ€ ๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋“ค์„ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐํ•˜๋Š”๋ฐ, ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ Sweep๋ผ๊ณ  ํ•œ๋‹ค.

์—ฌ๊ธฐ์„œ ์ฐธ์กฐ(์‚ฌ์šฉ)๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ์„ Reachable ์ฐธ์กฐ(์‚ฌ์šฉ)๋˜์ง€ ์•Š๋Š” ๊ฒƒ์„ UnReachable ๋ผ๊ณ  ํ•œ๋‹ค.


Minor GC์˜ ๋™์ž‘ ๋ฐฉ์‹

Minor GC๋ฅผ ์ •ํ™•ํžˆ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” Young ์˜์—ญ์˜ ๊ตฌ์กฐ์— ๋Œ€ํ•ด ์ดํ•ด๋ฅผ ํ•ด์•ผ ํ•œ๋‹ค. Young ์˜์—ญ์€ 1๊ฐœ์˜ Eden ์˜์—ญ๊ณผ 2๊ฐœ์˜ Survivor ์˜์—ญ, ์ด 3๊ฐ€์ง€๋กœ ๋‚˜๋‰˜์–ด์ง„๋‹ค.

  • Eden ์˜์—ญ: ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น(Allocation)๋˜๋Š” ์˜์—ญ
  • Survivor ์˜์—ญ: ์ตœ์†Œ 1๋ฒˆ์˜ GC ์ด์ƒ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š” ์˜์—ญ

๊ฐ์ฒด๊ฐ€ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋˜๋ฉด Young ์˜์—ญ ์ค‘์—์„œ๋„ Eden ์˜์—ญ์— ํ• ๋‹น(Allocation)์ด ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Eden ์˜์—ญ์ด ๊ฝ‰ ์ฐจ๋ฉด Minor GC๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ•ด์ œ๋˜๊ณ  Eden ์˜์—ญ์— ์กด์žฌํ•˜๋Š” ๊ฐ์ฒด๋Š” (์‚ฌ์šฉ์ค‘์ธ) Survivor ์˜์—ญ์œผ๋กœ ์˜ฎ๊ฒจ์ง€๊ฒŒ ๋œ๋‹ค. Survivor ์˜์—ญ์€ ์ด 2๊ฐœ์ด์ง€๋งŒ ๋ฐ˜๋“œ์‹œ 1๊ฐœ์˜ ์˜์—ญ์—๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•ด์•ผ ํ•˜๋Š”๋ฐ,Young ์˜์—ญ์˜ ๋™์ž‘ ์ˆœ์„œ๋ฅผ ์ž์„ธํžˆ ์‚ดํŽด๋ณด๋„๋ก ํ•˜์ž.

1.ใ€€์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ Eden ์˜์—ญ์— ํ• ๋‹น๋œ๋‹ค.

2.ใ€€๊ฐ์ฒด๊ฐ€ ๊ณ„์† ์ƒ์„ฑ๋˜์–ด Eden ์˜์—ญ์ด ๊ฝ‰์ฐจ๊ฒŒ ๋˜๊ณ  Minor GC๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

  • 2-1. Eden ์˜์—ญ์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•ด์ œ๋œ๋‹ค.
  • 2-2. Eden ์˜์—ญ์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” 1๊ฐœ์˜ Survivor ์˜์—ญ์œผ๋กœ ์ด๋™๋œ๋‹ค.

3.ใ€€1~2๋ฒˆ์˜ ๊ณผ์ •์ด ๋ฐ˜๋ณต๋˜๋‹ค๊ฐ€ Survivor ์˜์—ญ์ด ๊ฐ€๋“ ์ฐจ๊ฒŒ ๋˜๋ฉด Survivor ์˜์—ญ์˜ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฅธ Survivor ์˜์—ญ์œผ๋กœ ์ด๋™์‹œํ‚จ๋‹ค.(1๊ฐœ์˜ Survivor ์˜์—ญ์€ ๋ฐ˜๋“œ์‹œ ๋นˆ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.)

4.ใ€€์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜์—ฌ ๊ณ„์†ํ•ด์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” Old ์˜์—ญ์œผ๋กœ ์ด๋™(Promotion)๋œ๋‹ค.

๊ฐ์ฒด์˜ ์ƒ์กด ํšŸ์ˆ˜๋ฅผ ์นด์šดํŠธํ•˜๊ธฐ ์œ„ํ•ด Minor GC์—์„œ ๊ฐ์ฒด๊ฐ€ ์‚ด์•„๋‚จ์€ ํšŸ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋Š” age๋ฅผ Object Header์— ๊ธฐ๋กํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Minor GC ๋•Œ Object Header์— ๊ธฐ๋ก๋œ age๋ฅผ ๋ณด๊ณ  Promotion ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค. ๋˜ํ•œ Survivor ์˜์—ญ ์ค‘ 1๊ฐœ๋Š” ๋ฐ˜๋“œ์‹œ ์‚ฌ์šฉ์ด ๋˜์–ด์•ผ ํ•œ๋‹ค. ๋งŒ์•ฝ ๋‘ Survivor ์˜์—ญ์— ๋ชจ๋‘ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๊ฑฐ๋‚˜, ๋ชจ๋‘ ์‚ฌ์šฉ๋Ÿ‰์ด 0์ด๋ผ๋ฉด ํ˜„์žฌ ์‹œ์Šคํ…œ์ด ์ •์ƒ์ ์ธ ์ƒํ™ฉ์ด ์•„๋‹˜์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ง„ํ–‰ ๊ณผ์ •์„ ๊ทธ๋ฆผ์œผ๋กœ ์‚ดํŽด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

minor-gc

HotSpot JVM์—์„œ๋Š” Eden ์˜์—ญ์— ๊ฐ์ฒด๋ฅผ ๋น ๋ฅด๊ฒŒ ํ• ๋‹น(Allocation)ํ•˜๊ธฐ ์œ„ํ•ด bump the pointer์™€ TLABs(Thread-Local Allocation Buffers)๋ผ๋Š” ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. bump the pointer ๋ž€ Eden ์˜์—ญ์— ๋งˆ์ง€๋ง‰์œผ๋กœ ํ• ๋‹น๋œ ๊ฐ์ฒด์˜ ์ฃผ์†Œ๋ฅผ ์บ์‹ฑํ•ด๋‘๋Š” ๊ฒƒ์ด๋‹ค. bump the pointer๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์œ„ํ•ด ์œ ํšจํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํƒ์ƒ‰ํ•  ํ•„์š” ์—†์ด ๋งˆ์ง€๋ง‰ ์ฃผ์†Œ์˜ ๋‹ค์Œ ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•จ์œผ๋กœ์จ ์†๋„๋ฅผ ๋†’์ด๊ณ  ์žˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•  ๋•Œ ๊ฐ์ฒด์˜ ํฌ๊ธฐ๊ฐ€ Eden ์˜์—ญ์— ์ ํ•ฉํ•œ์ง€๋งŒ ํŒ๋ณ„ํ•˜๋ฉด ๋˜๋ฏ€๋กœ ๋น ๋ฅด๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

์‹ฑ๊ธ€ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์ด๋ผ๋ฉด ๋ฌธ์ œ๊ฐ€ ์—†๊ฒ ์ง€๋งŒ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์ด๋ผ๋ฉด ๊ฐ์ฒด๋ฅผ Eden ์˜์—ญ์— ํ• ๋‹นํ•  ๋•Œ ๋ฝ(Lock)์„ ๊ฑธ์–ด ๋™๊ธฐํ™”๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ์˜ ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด HotSpot JVM์€ ์ถ”๊ฐ€๋กœ TLABs(Thread-Local Allocation Buffers)๋ผ๋Š” ๊ธฐ์ˆ ์„ ๋„์ž…ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

TLABs(Thread-Local Allocation Buffers)๋ž€ ๊ฐ๊ฐ์˜ ์“ฐ๋ ˆ๋“œ๋งˆ๋‹ค Eden ์˜์—ญ์— ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•œ ์ฃผ์†Œ๋ฅผ ๋ถ€์—ฌํ•จ์œผ๋กœ์จ ๋™๊ธฐํ™” ์ž‘์—… ์—†์ด ๋น ๋ฅด๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋„๋ก ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค. ๊ฐ๊ฐ์˜ ์“ฐ๋ ˆ๋“œ๋Š” ์ž์‹ ์ด ๊ฐ–๋Š” ์ฃผ์†Œ์—๋งŒ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•จ์œผ๋กœ์จ ๋™๊ธฐํ™” ์—†์ด bump the poitner๋ฅผ ํ†ตํ•ด ๋น ๋ฅด๊ฒŒ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๋„๋ก ํ•˜๊ณ  ์žˆ๋‹ค.

Major GC์˜ ๋™์ž‘ ๋ฐฉ์‹

  • Young ์˜์—ญ์—์„œ ์˜ค๋ž˜ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” Old ์˜์—ญ์œผ๋กœ Promotion ๋จ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.
  • Major GC๋Š” ๊ฐ์ฒด๋“ค์ด ๊ณ„์† Promotion๋˜์–ด Old ์˜์—ญ์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ด์ง€๋ฉด ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.
  • Young ์˜์—ญ์€ ์ผ๋ฐ˜์ ์œผ๋กœ Old ์˜์—ญ๋ณด๋‹ค ํฌํ‚ค๊ฐ€ ์ž‘๊ธฐ ๋•Œ๋ฌธ์— GC๊ฐ€ ๋ณดํ†ต 0.5์ดˆ์—์„œ 1์ดˆ ์‚ฌ์ด์— ๋๋‚œ๋‹ค.
  • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Minor GC๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํฌ๊ฒŒ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.
  • ํ•˜์ง€๋งŒ Old ์˜์—ญ์€ Young ์˜์—ญ๋ณด๋‹ค ํฌ๋ฉฐ Young ์˜์—ญ์„ ์ฐธ์กฐํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  • ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Major GC๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ Minor GC๋ณด๋‹ค ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฌ๋ฉฐ, 10๋ฐฐ ์ด์ƒ์˜ ์‹œ๊ฐ„์„ ์‚ฌ์šฉํ•œ๋‹ค.

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๋น„๊ต ์š”์•ฝ

gc

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ข…๋ฅ˜

๊ธฐ๋ณธ์ ์ธ ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰์…˜ ๊ณผ์ •์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜๋‹ค. ํ•œํŽธ ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰ํ„ฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ 5๊ฐœ์˜ ์ข…๋ฅ˜๊ฐ€ ์กด์žฌํ•˜๊ณ  ์ƒํ™ฉ์— ๋”ฐ๋ผ ํ•„์š”ํ•œ ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰ํ„ฐ๋ฅผ ์„ ํƒํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

  • Serial GC
  • Palleral GC
  • Palleral Old GC
  • CMS GC (Concurrent Mark Sweep)
  • G1 GC (Garbage First)

๋

Java์˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Garbage Collection)์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค.

Reference

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

https://mangkyu.tistory.com/118?category=872426

Written on June 14, 2021