GC

GC(Garbage Collection)๋ž€ ๋ฌด์—‡์ธ๊ฐ€์š”?

  • GC(Garbage Collection)

  • ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•˜๋‹ค ๋ณด๋ฉด ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฉ”๋ชจ๋ฆฌ์ธ ๊ฐ€๋น„์ง€(Garbage) ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

  • Java๋ฅผ ์ด์šฉํ•ด ๊ฐœ๋ฐœํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•ด์ฃผ๋Š” ์ผ์€ ์—†๋Š”๋ฐ, ์ด๋Š” JVM์˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์•Œ์•„์„œ ์ •๋ฆฌํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

  • ๊ณผ์ •์œผ๋กœ๋Š” ํž™ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ํ•„์š”ํ•œ์ง€ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ฒ€์‚ฌํ•˜๋Š” Mark and Sweep, ์ˆ˜์ง‘ ํ›„ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ •๋ฆฌํ•˜๋Š” Compact๊ณผ์ •์ด ์žˆ๋‹ค.

  • ์žฅ์ 

    • ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฌธ์ œ(Memory leak)๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ด€๋ฆฌํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

      • ์˜๋„์ ์œผ๋กœ System.gc()๋ฅผ ์ด์šฉํ•ด ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ์‹œ์Šคํ…œ ์„ฑ๋Šฅ์— ๋งค์šฐ ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฏ€๋กœ ํ˜ธ์ถœํ•ด์„œ๋Š” ์•ˆ ๋œ๋‹ค.

  • ๋‹จ์ 

    • GC๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ ๋‹ค๋ฅธ ๋™์ž‘์„ ๋ฉˆ์ถ”๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, ์ˆ˜ํ–‰๋˜๋Š” ์‹œ์ ์„ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

      • Heap์˜ ํŠน์ • ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๋‹ค ์ฐผ์„ ๋•Œ ์ˆ˜ํ–‰๋˜๊ธด ํ•˜์ง€๋งŒ, ๊ทธ ์‹œ์ ์„ ์ •ํ™•ํ•˜๊ฒŒ ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

GC์˜ ๋“ฑ์žฅ ๋ฐฐ๊ฒฝ์€ ๋ฌด์—‡์ธ๊ฐ€์š”?

  • ๊ณผ๊ฑฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋“ค์€ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๊ธฐ๋Šฅ์ด ์กด์žฌํ•˜์ง€ ์•Š๊ฑฐ๋‚˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ˆ˜๋™์œผ๋กœ ํ•ด์ œํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ–ˆ๋‹ค.(๋Œ€ํ‘œ์ ์œผ๋กœ C, C++)

  • OS ๋ ˆ๋ฒจ์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ง์ ‘ ํ• ๋‹น๋ฐ›์•˜๋˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ํ•ด์ œํ•ด์ค˜์•ผ ํ–ˆ๋‹ค.

  • ์ด๋Ÿฐ ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‹ค์ˆ˜๋“ค๋กœ ์ธํ•ด ๋ฒ„๊ทธ์˜ ์›์ธ์ด ๋๋‹ค.

    • ์ด์ค‘ ํ•ด์ œ : ํ•ด์ œํ–ˆ๋˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‹ค์ˆ˜๋กœ ์žฌํ•ด์ œ

    • ์œ ํšจํ•˜์ง€ ์•Š์€ ํฌ์ธํ„ฐ ์ ‘๊ทผ : ํ•ด์žฌํ–ˆ๋˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‹ค์ˆ˜๋กœ ์žฌ์‚ฌ์šฉ

    • ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(Memory Leak) : ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•œ ํ›„ ํ•„์š” ์—†์–ด์ง„ ๋’ค์—๋„ ํ•ด์ œ๋ฅผ ํ•˜์ง€ ์•Š์•„ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒ, ์ด๋Ÿฐ ๋ˆ„์ˆ˜๊ฐ€ ์Œ“์—ฌ ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ๊นŒ์ง€ ์ด์–ด์งˆ ์ˆ˜ ์žˆ์Œ

Java์—์„œ๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ๋Œ€์‹ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์žฅ์ ๋“ค์ด ์žˆ๋‹ค.

  • Java ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•œ์ •๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•œ๋‹ค.

  • ๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ, ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ๋ฌธ์ œ์— ๋Œ€ํ•ด ๊ด€๋ฆฌํ•˜์ง€ ์•Š์•„๋„ ๋ผ ๊ฐœ๋ฐœ์—๋งŒ ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋‹ค.

Heap ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

  • JVM์˜ ํž™ ์˜์—ญ์€ ๋™์ ์œผ๋กœ ๋ ˆํผ๋Ÿฐ์Šค ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„์œผ๋กœ, ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์˜ ๋Œ€์ƒ์ด ๋˜๋Š” ๊ณต๊ฐ„์ด๋‹ค.

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

  1. ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๋Š” ๊ธˆ๋ฐฉ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

  2. ์˜ค๋ž˜๋œ ๊ฐ์ฒด์—์„œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด ์ฐธ์กฐ๋Š” ์•„์ฃผ ๋“œ๋ฌผ๋‹ค.

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

img_5.png
img_2.png

Young ์˜์—ญ

  • ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น(Allocation)๋˜๋Š” ์˜์—ญ

  • ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๊ฐ€ ๊ธˆ๋ฐฉ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํƒœ(UnReachable)๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋งŽ์€ ๊ฐ์ฒด๊ฐ€ Young ์˜์—ญ์— ์ƒ์„ฑ๋˜์—ˆ๋‹ค๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค.

  • Young ์˜์—ญ์— ๋Œ€ํ•œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ Minor GC๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

Old ์˜์—ญ

  • Young ์˜์—ญ์—์„œ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์—ฌ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๊ฐ€ ๋ณต์‚ฌ๋˜๋Š” ์˜์—ญ

  • Young ์˜์—ญ๋ณด๋‹ค ํฌ๊ฒŒ ํ• ๋‹น๋˜๋ฉฐ, ์˜์—ญ์˜ ํฌ๊ธฐ๊ฐ€ ํฐ ๋งŒํผ ๊ฐ€๋น„์ง€(Garbage)๋Š” ์ ๊ฒŒ ๋ฐœ์ƒํ•œ๋‹ค.

  • Old ์˜์—ญ์— ๋Œ€ํ•œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ Major GC๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

Old ์˜์—ญ์ด Young ์˜์—ญ๋ณด๋‹ค ํฌ๊ฒŒ ํ• ๋‹น๋˜๋Š” ์ด์œ ๋Š” Young ์˜์—ญ์˜ ์ˆ˜๋ช…์ด ์งง์€ ๊ฐ์ฒด๋“ค์€ ํฐ ๊ณต๊ฐ„์„ ํ•„์š”๋กœ ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ํฐ ๊ฐ์ฒด๋“ค์€ Young ์˜์—ญ์ด ์•„๋‹ˆ๋ผ ๋ฐ”๋กœ Old ์˜์—ญ์— ํ• ๋‹น๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

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

1. Stop The World

  • Stop The World๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด JVM์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰์„ ๋ฉˆ์ถ”๋Š” ์ž‘์—…์ด๋‹ค.

  • GC๊ฐ€ ์‹คํ–‰๋  ๋•Œ๋Š” GC๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์“ฐ๋ ˆ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๋“ค์˜ ์ž‘์—…์ด ์ค‘๋‹จ๋˜๊ณ , GC๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด ์ž‘์—…์ด ์žฌ๊ฐœ๋œ๋‹ค.

  • ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๋“ค์˜ ์ž‘์—…์ด ์ค‘๋‹จ๋˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฉˆ์ถ”๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์—, GC ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ์œ„ํ•ด ํŠœ๋‹์„ ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด Stop The World์˜ ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ์ž‘์—…์„ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

2. Mark and Sweep

  • Mark : ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ์™€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ์ž‘์—…

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

  • Stop The World๋ฅผ ํ†ตํ•ด ๋ชจ๋“  ์ž‘์—…์„ ์ค‘๋‹จ์‹œํ‚ค๋ฉด, GC๋Š” ์Šคํƒ์˜ ๋ชจ๋“  ๋ณ€์ˆ˜ ๋˜๋Š” Reachable ๊ฐ์ฒด๋ฅผ ์Šค์บ”ํ•˜๋ฉด์„œ ๊ฐ๊ฐ ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š”์ง€ ํƒ์ƒ‰ํ•œ๋‹ค.

  • ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‹๋ณ„ํ•˜๋Š”๋ฐ, ์ด๋Ÿฐ ๊ณผ์ •์„ Mark๋ผ๊ณ  ํ•œ๋‹ค.

  • ์ดํ›„์— Mark๊ฐ€ ๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋“ค์„ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐํ•˜๋Š”๋ฐ, ์ด๋Ÿฐ ๊ณผ์ •์„ Sweep์ด๋ผ๊ณ  ํ•œ๋‹ค.

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

  • ํž™ ์˜์—ญ์—์„œ Young ์˜์—ญ์€ ํšจ์œจ์ ์ธ GC๋ฅผ ์œ„ํ•ด 1๊ฐœ์˜ Eden ์˜์—ญ๊ณผ 2๊ฐœ์˜ Survivor ์˜์—ญ์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

    • Eden ์˜์—ญ : ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น(Allocation)๋˜๋Š” ์˜์—ญ

    • Survivor ์˜์—ญ : Minor GC๋กœ๋ถ€ํ„ฐ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์ด ์กด์žฌํ•˜๋Š” ์˜์—ญ

img_3.png
  • ๊ฐ์ฒด๊ฐ€ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋˜๋ฉด Young ์˜์—ญ ์ค‘์—์„œ๋„ Eden ์˜์—ญ์— ํ• ๋‹น๋˜๊ณ , Eden ์˜์—ญ์ด ๊ฝ‰ ์ฐจ๋ฉด Minor GC๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค.

  • ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ•ด์ œ๋˜๊ณ , Eden ์˜์—ญ์— ์กด์žฌํ•˜๋Š” ๊ฐ์ฒด๋Š”(์‚ฌ์šฉ์ค‘์ธ ๊ฐ์ฒด) Survivor ์˜์—ญ์œผ๋กœ ์˜ฎ๊ฒจ์ง€๊ฒŒ ๋œ๋‹ค.

  • ์—ฌ๊ธฐ์„œ Survivor ์˜์—ญ์€ ์ด 2๊ฐœ์ด์ง€๋งŒ ๋ธ๋‹ค์‹œ 1๊ฐœ์˜ ์˜์—ญ์—๋งŒ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•ด์•ผ ํ•œ๋‹ค.

Young ์˜์—ญ ๋™์ž‘ ์ˆœ์„œ

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

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

    • Eden ์˜์—ญ์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•ด์ œ๋œ๋‹ค.

    • Eden ์˜์—ญ์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” 1๊ฐœ์˜ Survivor ์˜์—ญ์œผ๋กœ ์ด๋™๋œ๋‹ค.

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

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

๊ฐ์ฒด์˜ ์ƒ์กด ํšŸ์ˆ˜๋ฅผ ์นด์šดํŠธํ•˜๊ธฐ ์œ„ํ•ด Minor GC์—์„œ ๊ฐ์ฒด๊ฐ€ ์‚ด์•„๋‚จ์€ ํšŸ์ˆ˜๋ฅผ ์˜๋ฏธํ•˜๋Š” age-bit๋ฅผ ๊ธฐ๋กํ•œ๋‹ค.(Minor GC์—์„œ ์‚ด์•„๋‚จ์„ ๋•Œ๋งˆ๋‹ค 1์”ฉ ์ฆ๊ฐ€) ๊ทธ๋ฆฌ๊ณ  Minor GC ๋•Œ age-bit๊ฐ€ ์ด๋™(Promotion) ๊ฒฐ์ • ์—ฌ๋ถ€๊ฐ€ ๋œ๋‹ค.

๋˜ํ•œ Survivor ์˜์—ญ ์ค‘ 1๊ฐœ๋Š” ๋ฐ˜๋“œ์‹œ ์‚ฌ์šฉ์ด ๋˜์–ด์•ผ ํ•˜๋Š”๋ฐ, ๋งŒ์•ฝ ๋‘ Survivor ์˜์—ญ์— ๋ชจ๋‘ ๋ฐ์ดํ„ฐ๊ฐ€ ์กด์žฌํ•˜๊ฑฐ๋‚˜, ๋ชจ๋‘ ์‚ฌ์šฉ๋Ÿ‰์ด 0์ด๋ผ๋ฉด ํ˜„์žฌ ์‹œ์Šคํ…œ์ด ์ •์ƒ์ ์ธ ์ƒํ™ฉ์ด ์•„๋‹˜์„ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋‹ค.

img_4.png

HotSpot JVM์—์„œ๋Š” Eden ์˜์—ญ์— ๊ฐ์ฒด๋ฅผ ๋น ๋ฅด๊ฒŒ ํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•ด bump the pointer์™€ TLABs๋ผ๋Š” ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

  • bump the pointer

    • Eden ์˜์—ญ์— ๋งˆ์ง€๋ง‰์œผ๋กœ ํ• ๋‹น๋œ ๊ฐ์ฒด์˜ ์ฃผ์†Œ๋ฅผ ์บ์‹ฑํ•ด๋‘๋Š” ๊ฒƒ

    • ์ด๋ฅผ ํ†ตํ•ด ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์œ„ํ•ด ์œ ํšจํ•œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํƒ์ƒ‰ํ•  ํ•„์š” ์—†์ด ๋งˆ์ง€๋ง‰ ์ฃผ์†Œ์˜ ๋‹ค์Œ ์ฃผ์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•ด ์†๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

    • ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•  ๋•Œ ๊ฐ์ฒด์˜ ํฌ๊ธฐ๊ฐ€ Eden ์˜์—ญ์— ์ ํ•ฉํ•œ์ง€๋งŒ ํŒ๋‹จํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋น ๋ฅด๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • TLABs(Thread-Local Allocation Buffers)

    • ๊ฐ๊ฐ์˜ ์“ฐ๋ ˆ๋“œ๋งˆ๋‹ค Eden ์˜์—ญ์— ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•œ ์ฃผ์†Œ๋ฅผ ๋ถ€์—ฌํ•ด ๋™๊ธฐํ™” ์ž‘์—… ์—†์ด ๋น ๋ฅด๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋„๋ก ํ•˜๋Š” ๊ธฐ์ˆ 

    • ์‹ฑ๊ธ€ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์ด๋ผ๋ฉด ๋ฌธ์ œ๊ฐ€ ์—†๊ฒ ์ง€๋งŒ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์ด๋ผ๋ฉด Eden ์˜์—ญ์— ํ• ๋‹นํ•  ๋•Œ ๋ฝ์„ ๊ฑธ์–ด ๋™๊ธฐํ™”๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

    • ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ์˜ ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด HotSpot JVM์€ ์ถ”๊ฐ€๋กœ TLABs๋ผ๋Š” ๊ธฐ์ˆ ์„ ๋„์ž…ํ–ˆ๋‹ค.

    • ๊ฐ๊ฐ์˜ ์“ฐ๋ ˆ๋“œ๋Š” ์ž์‹ ์ด ๊ฐ–๋Š” ์ฃผ์†Œ์—๋งŒ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•จ์œผ๋กœ์จ ๋™๊ธฐํ™” ์—†์ด bump the pointer๋ฅผ ํ†ตํ•ด ๋น ๋ฅด๊ฒŒ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๋„๋ก ํ•œ๋‹ค.

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

  • Young ์˜์—ญ์—์„œ ์˜ค๋ž˜ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” Old ์˜์—ญ์œผ๋กœ ์ด๋™(Promotion)๋๋‹ค.

  • Major GC๋Š” ๊ฐ์ฒด๋“ค์ด ๊ณ„์† ์ด๋™๋˜์–ด Old ์˜์—ญ์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ด์ง€๋ฉด ๋ฐœ์ƒํ•œ๋‹ค.

  • Young ์˜์—ญ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ํฌ๊ธฐ๊ฐ€ ์ž‘์•„ Minor GC๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํฌ๊ฒŒ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.

  • ํ•˜์ง€๋งŒ Old ์˜์—ญ์€ ํฌ๊ธฐ๋„ ํฌ๋ฉฐ Young ์˜์—ญ์„ ์ฐธ์กฐํ•  ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Major GC๋Š” Minor GC๋ณด๋‹ค ํ›จ์”ฌ ์˜ค๋žœ ์‹œ๊ฐ„์ด ์†Œ์š”๋œ๋‹ค.

  • Young ์˜์—ญ๊ณผ Old ์˜์—ญ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋Š” GC๋Š” Full GC๋ผ๊ณ  ํ•œ๋‹ค.

Minor GC
Major GC

๋Œ€์ƒ

Young ์˜์—ญ

Old ์˜์—ญ

์‹คํ–‰ ์‹œ์ 

Eden ์˜์—ญ์ด ๊ฝ‰ ์ฐฌ ๊ฒฝ์šฐ

Old ์˜์—ญ์ด ๊ฝ‰ ์ฐฌ ๊ฒฝ์šฐ

์‹คํ–‰ ์†๋„

๋น ๋ฅด๋‹ค

๋А๋ฆฌ๋‹ค

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์˜ ์—ฌ๋Ÿฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด ์ฃผ์„ธ์š”.

  • JVM์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๊ฒƒ์€ ๊ฐœ๋ฐœ์ž์˜ ์ž…์žฅ์—์„œ ์ƒ๋‹นํ•œ ๋ฉ”๋ฆฌํŠธ์ด์ง€๋งŒ, ๋ฌธ์ œ๋Š” GC๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด Stop The World์— ์˜ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ค‘์ง€๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

  • ์ด๋ฅผ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•œ GC ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๊ฐœ๋ฐœ ๋˜์—ˆ๋‹ค.

Serial GC

java -XX:+UseSerialGC -jar Application.java
img_6.png
  • ์„œ๋ฒ„์˜ CPU ์ฝ”์–ด๊ฐ€ 1๊ฐœ์ผ ๋•Œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๊ฐœ๋ฐœ๋œ ๊ฐ€์žฅ ๋‹จ์ˆœํ•œ GC

  • GC๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์“ฐ๋ ˆ๋“œ๊ฐ€ 1๊ฐœ(์‹ฑ๊ธ€ ์“ฐ๋ ˆ๋“œ) ์—ฌ์„œ GC ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘ ๊ฐ€์žฅ Stop The World ์‹œ๊ฐ„์ด ๊ธธ๋‹ค.

  • Minor GC์—๋Š” Mark-Sweep์„ ์‚ฌ์šฉํ•˜๊ณ , Major GC์—๋Š” Mark-Sweep-Compaction์„ ์‚ฌ์šฉํ•œ๋‹ค.

Parallel GC

java -XX:+UseParallelGC -jar Application.java 
# -XX:ParallelGCThreads=N : ์‚ฌ์šฉํ•  ์“ฐ๋ ˆ๋“œ์˜ ๊ฐฏ์ˆ˜
img_7.png
  • Java 8์˜ ๋””ํดํŠธ GC ๋ฐฉ์‹

  • Serial GC์™€ ๊ธฐ๋ณธ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฐ™๊ณ , Young ์˜์—ญ์˜ Minor GC๋ฅผ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋กœ ์ˆ˜ํ–‰ํ•œ๋‹ค.(Old ์˜์—ญ์€ ์‹ฑ๊ธ€ ์“ฐ๋ ˆ๋“œ๋กœ)

  • Serial GC์— ๋น„ํ•ด Stop The World ์‹œ๊ฐ„์ด ๊ฐ์†Œํ•œ๋‹ค.

Parallel Old GC(Parallel Compacting Collector)

java -XX:+UseParallelOldGC -jar Application.java
# -XX:ParallelGCThreads=N : ์‚ฌ์šฉํ•  ์“ฐ๋ ˆ๋“œ์˜ ๊ฐฏ์ˆ˜
img_8.png
  • Parallel GC๋ฅผ ๊ฐœ์„ ํ•œ ๋ฒ„์ „

  • Young ์˜์—ญ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, Old ์˜์—ญ์—์„œ๋„ ๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ๋กœ GC๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • ์ƒˆ๋กœ์šด ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ์ฒญ์†Œ ๋ฐฉ์‹์ธ Mark-Summary-Compact ๋ฐฉ์‹์„ ์ด์šฉํ•œ๋‹ค.

CMS(Concurrent Mark Sweep) GC

# deprecated in java9 and finally dropped in java14
java -XX:+UseConcMarkSweepGC -jar Application.java
img_9.png
  • Stop The World ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ ์•Œ๊ณ ๋ฆฌ์ฆ˜

  • ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ€๋น„์ง€(Garbage) ์ˆ˜์ง‘ ์ž‘์—…์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์“ฐ๋ ˆ๋“œ์™€ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•ด์„œ Stop The World ์‹œ๊ฐ„์„ ์ตœ์†Œํ™” ์‹œํ‚จ๋‹ค.

  • ํ•˜์ง€๋งŒ CPU์™€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  Mark and Sweep ์ดํ›„ ๋ฉ”๋ชจ๋ฆฌ ํŒŒํŽธํ™”๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” Compaction์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

  • Java 9 ๋ถ€ํ„ฐ deprecated ๋˜์—ˆ๊ณ , Java 14 ์—์„œ๋Š” ์‚ฌ์šฉ์ด ์ค‘์ง€๋˜์—ˆ๋‹ค.

  • G1 GC์˜ ๋“ฑ์žฅ์— ๋”ฐ๋ผ CMS CG๋Š” ๋Œ€์ฒด๋˜์—ˆ๋‹ค.

G1(Garbage-First) GC

java -XX:+UseG1GC -jar Application.java
  • CMS GC๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ๋˜์—ˆ๊ณ , Java 9 ์ด์ƒ ๋ฒ„์ „์—์„œ ๋””ํดํŠธ GC๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

  • ๊ธฐ์กด GC ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ Heap ์˜์—ญ์„ ๋ฌผ๋ฆฌ์ ์œผ๋กœ Young ์˜์—ญ(1๊ฐœ์˜ Eden๊ณผ 2๊ฐœ์˜ Survivor ์˜์—ญ)๊ณผ Old ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด ์‚ฌ์šฉํ•˜์˜€๋‹ค.

  • G1 GC๋Š” Eden ์˜์—ญ์— ํ• ๋‹นํ•˜๊ณ , Survivor๋กœ ์นดํ”ผํ•˜๋Š” ๋“ฑ์˜ ๊ณผ์ •์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๋‚˜๋ˆ„์ง€ ์•Š๋Š”๋‹ค.

  • ๋Œ€์‹  Region์ด๋ผ๋Š” ์ƒˆ๋กœ์šด ๊ฐœ๋…์„ ๋„์ž…ํ•˜์—ฌ Heap์„ ๊ท ๋“ฑํ•˜๊ฒŒ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ง€์—ญ์œผ๋กœ ๋‚˜๋ˆ„๊ณ , ๊ฐ ์ง€์—ญ์„ ์—ญํ• ๊ณผ ํ•จ๊ป˜ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ Eden ์ง€์—ญ์ธ์ง€, Survivor ์ง€์—ญ์ธ์ง€, Old ์ง€์—ญ์ธ์ง€ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•œ๋‹ค.

img_10.png
  • G1 GC์—์„œ๋Š” Eden, Survivor, Old ์— ๋”ํ•ด Humonogous์™€ Available/Unused๋ผ๋Š” 2๊ฐ€์ง€ ์—ญํ• ์„ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

  • Humonogous๋Š” Region ํฌ๊ธฐ์˜ 50% ๋ฅผ ์ดˆ๊ณผํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•˜๋Š” Region์„ ์˜๋ฏธํ•˜๋ฉฐ, Available/Unused๋Š” ์‚ฌ์šฉ๋˜์ง€ ์•Š์€ Region์„ ์˜๋ฏธํ•œ๋‹ค.

  • G1 GC์˜ ํ•ต์‹ฌ์€ Heap์„ ๋™์ผํ•œ ํฌ๊ธฐ์˜ Region์œผ๋กœ ๋‚˜๋ˆ„๊ณ , ๊ฐ€๋น„์ง€๊ฐ€ ๋งŽ์€ Region์— ๋Œ€ํ•ด ์šฐ์„ ์ ์œผ๋กœ GC๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

  • G1 GC๋„ Minor GC์™€ Major GC๋กœ ๋‚˜๋ˆ„์–ด ์ˆ˜ํ–‰๋œ๋‹ค.

Minor GC

  • ํ•œ ์ง€์—ญ์— ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๋‹ค๊ฐ€ ํ•ด๋‹น ์ง€์—ญ์ด ๊ฝ‰ ์ฐจ๋ฉด ๋‹ค๋ฅธ ์ง€์—ญ์— ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๊ณ , Minor GC๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

  • G1 GC๋Š” ๊ฐ ์ง€์—ญ์„ ์ถ”์ ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐ€๋น„์ง€๊ฐ€ ๊ฐ€์žฅ ๋งŽ์€(Garbage First) ์ง€์—ญ์„ ์ฐพ์•„์„œ Mark and Sweep์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • Eden ์ง€์—ญ์—์„œ GC๊ฐ€ ์ˆ˜ํ–‰๋˜๋ฉด ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋ฅผ Markํ•˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ๋ฅผ Sweep(ํšŒ์ˆ˜)ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฅธ ์ง€์—ญ์œผ๋กœ ์ด๋™์‹œํ‚จ๋‹ค.

  • ๋ณต์ œ๋˜๋Š” ์ง€์—ญ์ด Avaliable/Unused ์ง€์—ญ์ด๋ฉด ํ•ด๋‹น ์ง€์—ญ์€ ์ด์ œ Survivor ์˜์—ญ์ด ๋˜๊ณ , Eden ์˜์—ญ์€ Avaliable/Unused ์ง€์—ญ์ด ๋œ๋‹ค.

Major GC(Full GC)

  • ์‹œ์Šคํ…œ์ด ๊ณ„์† ์šด์˜๋˜๋‹ค๊ฐ€ ๊ฐ์ฒด๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„ ๋น ๋ฅด๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšŒ์ˆ˜ํ•  ์ˆ˜ ์—†์„ ๋•Œ Major GC๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

  • ๊ธฐ์กด์˜ ๋‹ค๋ฅธ GC ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๋ชจ๋“  Heap ์˜์—ญ์—์„œ GC๊ฐ€ ์ˆ˜ํ–‰๋˜์–ด, ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ์ƒ๋‹นํžˆ ์˜ค๋ž˜ ๊ฑธ๋ ธ๋‹ค.

  • ํ•˜์ง€๋งŒ G1 GC๋Š” ์–ด๋А ์˜์—ญ์— ๊ฐ€๋น„์ง€๊ฐ€ ๋งŽ์€ ์ง€๋ฅผ ์•Œ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— GC๋ฅผ ์ˆ˜ํ–‰ํ•  ์ง€์—ญ์„ ์กฐํ•ฉํ•˜์—ฌ ํ•ด๋‹น ์ง€์—ญ์— ๋Œ€ํ•ด์„œ๋งŒ GC๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  • ๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ ์ž‘์—…์€ Concurrentํ•˜๊ฒŒ(๋™์‹œ์—) ์ˆ˜ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ง€์—ฐ๋„ ์ตœ์†Œํ™”ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

๊ผฌ๋ฆฌ ์งˆ๋ฌธ

  • ์ž๋ฐ”๋ฅผ ํ•˜๋ฉด์„œ G1 GC๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๊ทธ ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?

    • ๊ธฐ์กด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋‹ค๋ฅธ GC ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์–ด์„œ, ์ƒˆ๋กœ์šด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์„ฑ๋Šฅ์„ ํ‰๊ฐ€ํ•˜๊ธฐ ์ „์— ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

    • G1 GC ์˜ ์„ฑ๋Šฅ์ด ๊ธฐ์กด ์•Œ๊ณ ๋ฆฌ์ฆ˜๋ณด๋‹ค ๋–จ์–ด์ ธ์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํŠน์ •ํ•œ ์š”๊ตฌ ์‚ฌํ•ญ์ด ์žˆ์–ด์„œ G1 GC๊ฐ€ ์ ํ•ฉํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.

G1 GC๋Š”

  • ๊ณต๊ฐ„ ๋ถ€์กฑ ์ƒํƒœ(Minor GC, Major GC๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋‚˜์„œ๋„ ์—ฌ์œ  ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ)๋ฅผ ์กฐ์‹ฌํ•ด์•ผ ํ•œ๋‹ค.

    • ์ด๋•Œ๋Š” Full GC๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, ์‹ฑ๊ธ€ ์“ฐ๋ ˆ๋“œ๋กœ ๋™์ž‘ํ•œ๋‹ค.

    • Full GC๋Š” Heap ์ „๋ฐ˜์ ์œผ๋กœ GC๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ๋œปํ•œ๋‹ค.

  • ์ž‘์€ Heap ๊ณต๊ฐ„์„ ๊ฐ€์ง€๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ์ œ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•˜์ง€ ๋ชปํ•˜๊ณ  Full GC๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

  • Humonogous ์˜์—ญ์€ ์ œ๋Œ€๋กœ ์ตœ์ ํ™”๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํ•ด๋‹น ์˜์—ญ์ด ๋งŽ์œผ๋ฉด ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง„๋‹ค.

Shenandoah GC

java -XX:+UseShenandoahGC -jar Application.java
img_11.png
  • ๋ ˆ๋“œํ–‡์—์„œ ๊ฐœ๋ฐœํ•œ GC๋กœ, Java 12 ์— release ๋๋‹ค.

  • ๊ธฐ์กด CMS GC๊ฐ€ ๊ฐ€์ง„ ๋‹จํŽธํ™”, G1 GC๊ฐ€ ๊ฐ€์ง„ pause์˜ ์ด์Šˆ๋ฅผ ํ•ด๊ฒฐํ–ˆ๋‹ค.

  • ๊ฐ•๋ ฅํ•œ Concurrency์™€ ๊ฐ€๋ฒผ์šด GC ๋กœ์ง์œผ๋กœ Heap ์‚ฌ์ด์ฆˆ์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ณ  ์ผ์ •ํ•œ pause ์‹œ๊ฐ„ ์†Œ์š”๊ฐ€ ํŠน์ง•์ด๋‹ค.

ZGC

java -XX:+UnlockExperimentalVMOptions -XX:+UseZGC -jar Application.java
img_12.png
  • Java 15์— release ๋œ GC๋กœ, ๋Œ€๋Ÿ‰์˜ ๋ฉ”๋ชจ๋ฆฌ(8MB ~ 16TB)๋ฅผ low-latency(์ €์ง€์—ฐ) ๋กœ ์ž˜ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋””์ž์ธ๋œ GC

  • G1 GC์˜ Region ์ฒ˜๋Ÿผ, ZGC๋Š” ZPage๋ผ๋Š” ์˜์—ญ์„ ์‚ฌ์šฉํ•˜๋ฉฐ, G1 GC์˜ Region์€ ํฌ๊ธฐ๊ฐ€ ๊ณ ์ •์ธ๋ฐ ๋น„ํ•ด, ZPage๋Š” 2MB ๋ฐฐ์ˆ˜๋กœ ๋™์ ์œผ๋กœ ์šด์˜๋œ๋‹ค.

    • ํฐ ๊ฐ์ฒด๊ฐ€ ๋“ค์–ด์˜ค๋ฉด 2^๋กœ ์˜์—ญ์„ ๊ตฌ์„ฑํ•ด์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค.

  • ZGC์˜ ๊ฐ€์žฅ ํฐ ์žฅ์ ์€ Heap ํฌ๊ธฐ๊ฐ€ ์ฆ๊ฐ€ํ•˜๋”๋ผ๋„ Stop The World ์˜ ์‹œ๊ฐ„์ด ์ ˆ๋Œ€ 10ms๋ฅผ ๋„˜์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์ฐธ๊ณ 

Last updated