Post

[Java] Garbage Collector๋ž€?

[Java] Garbage Collector๋ž€?

๐Ÿ“Œย GC(Garbage Collector)๋ž€?

Garbage Collector๋ž€ JVM์ด Heap ์˜์—ญ์—์„œ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ์ž๋™์œผ๋กœ ํƒ์ง€ํ•˜๊ณ  ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšŒ์ˆ˜ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ์˜๋ฏธํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ๋ฅผ ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

๐Ÿ“Œย JVM์—์„œ Heap ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

image.png

  1. Young Generation
    • Eden Space: ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋Š” ๋Œ€๋ถ€๋ถ„ ์ด ๊ณต๊ฐ„์— ์ €์žฅ๋œ๋‹ค.
    • Survivor Spaces: Eden Space์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„์ด๋‹ค.
    • Young Generatiob์—์„œ๋Š” ๊ฐ์ฒด์˜ ์ƒ์„ฑ๊ณผ ์†Œ๋ฉธ์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜๋ฉฐ Minor GC ๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒํ•œ๋‹ค.
  2. Old Generation
    • Young Generation์—์„œ ์—ฌ๋Ÿฌ ๋ฒˆ์˜ Minor GC๋ฅผ ๊ฑฐ์ณ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„์ด๋‹ค.
    • Young Generation๋ณด๋‹ค ํฌ๊ธฐ๊ฐ€ ํฌ๋ฉฐ Major GC ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ด ๊ณต๊ฐ„์˜ ๊ฐ์ฒด๊ฐ€ ์†Œ๋ฉธ๋œ๋‹ค.
  3. Permanent Generation
    • Java 8 ์ด์ „์— ์กด์žฌํ•˜๋˜ ๊ณต๊ฐ„์ด๋‹ค. ํด๋ž˜์Šค์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์™€ static ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜์—ˆ๋‹ค. Java 8๋ถ€ํ„ฐ Metaspace ๋ผ๋Š” ๋ณ„๋„์˜ ๋„ค์ดํ‹ฐ๋ธŒ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์œผ๋กœ ๋Œ€์ฒด๋˜์—ˆ๋‹ค.
    • ์ด ๊ณต๊ฐ„์€ ํž™์ด ์•„๋‹ˆ๋‹ค.

๐Ÿ“Œย Major GC์™€ Minor GC

์œ„์—์„œ ๋“ฑ์žฅํ•œ Major GC์™€ Minor GC์— ๋Œ€ํ•ด ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž.

Major GC

Major GC๋Š” Old Generation์—์„œ ๋ฐœ์ƒํ•œ๋‹ค. Old Generation์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•  ๋•Œ ํŠธ๋ฆฌ๊ฑฐ๋œ๋‹ค. ์ „์ฒด ํž™ ๋˜๋Š” Old Generation์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋ฏ€๋กœ Minor GC์— ๋น„ํ•ด ์ˆ˜ํ–‰ ์‹œ๊ฐ„์ด ๊ธธ๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ค‘๋‹จ ์‹œ๊ฐ„์ด ๋” ๊ธธ๋‹ค. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ค‘๋‹จ ํ˜„์ƒ์„ Stop the World ํ˜„์ƒ์ด๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ๋’ค์— ํ›„์ˆ ํ•œ๋‹ค.

Minor GC

Minor GC๋Š” Young Generation์—์„œ ๋ฐœ์ƒํ•œ๋‹ค. Eden ๊ณต๊ฐ„์˜ ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ์ฐธ์กฐ๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” Survivor ๊ณต๊ฐ„์œผ๋กœ ์ด๋™์‹œํ‚จ๋‹ค. Survivor ๊ณต๊ฐ„์ด ๊ฐ€๋“ ์ฐจ๋ฉด ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” ๋‹ค๋ฅธ Survivor ๊ณต๊ฐ„์œผ๋กœ ์ด๋™ํ•˜๊ฑฐ๋‚˜ ์—ฌ๋Ÿฌ ๋ฒˆ์˜ Minor GC๋ฅผ ์‚ด์•„๋‚จ์€ ๊ฒฝ์šฐ Old Generation์œผ๋กœ ์Šน๊ฒฉ๋œ๋‹ค. Younger Generation์„ ๋Œ€์ƒ์œผ๋กœ ํ•˜๋ฏ€๋กœ ์ˆ˜ํ–‰ ์‹œ๊ฐ„์ด ์งง๊ณ  Stop-the-World ํ˜„์ƒ์ด ๋ฐœ์ƒํ•˜๋‚˜ ๊ทธ ์˜ํ–ฅ์ด ํฌ์ง€ ์•Š๋‹ค.

ํ‘œ๋กœ ์ •๋ฆฌํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

๊ตฌ๋ถ„๋Œ€์ƒ ๊ณต๊ฐ„ํŠธ๋ฆฌ๊ฑฐ ์กฐ๊ฑด์ˆ˜ํ–‰ ์‹œ๊ฐ„์˜ํ–ฅ
Minor GCYounge GenerationEden ์˜์—ญ์ด ๊ฐ€๋“ ์ฐผ์„ ๋•Œ์งง์Œ์˜ํ–ฅ ์ ์Œ
Major GCOld GenerationOld ์˜์—ญ์ด ๊ฐ€๋“ ์ฐผ์„ ๋•Œ๊น€์‹œ์Šคํ…œ ์„ฑ๋Šฅ์— ์˜ํ–ฅ ํผ

๐Ÿ“Œย ๋™์ž‘ ๋ฐฉ์‹

Stop the World

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

๋ชจ๋“  ์“ฐ๋ ˆ๋“œ๋ฅผ ๋ฉˆ์ถ”๋Š” ์ด์œ ๊ฐ€ ๋ฌด์—‡์ผ๊นŒ? ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ๊ฐ์ฒด์˜ ์ฐธ์กฐ ๊ด€๊ณ„๊ฐ€ ๋ณ€ํ•˜์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•ด ์‚ด์•„์žˆ๋Š” ๊ฐ์ฒด์™€ ์ฃฝ์€ ๊ฐ์ฒด๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. GC๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๊ฐ์ฒด ์ฐธ์กฐ๊ฐ€ ๋ณ€๊ฒฝ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž. ์˜ฌ๋ฐ”๋ฅธ ๊ฐ์ฒด ์‹๋ณ„์ด ์–ด๋ ค์šธ ๊ฒƒ์ด๋‹ค.

Stop the World๋Š” GC์˜ ์„ฑ๋Šฅ๊ณผ ์ง๊ฒฐ๋˜๋ฉฐ, ์ด ๋‹จ๊ณ„์˜ ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•˜๊ธฐ ์œ„ํ•ด GC ํŠœ๋‹์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ์ตœ์‹  GC ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ Stop the World ์‹œ๊ฐ„์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ๋Œ€๋ถ€๋ถ„์˜ ์ž‘์—…์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋จ๊ณผ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ผญ ํ•„์š”ํ•œ ์ˆœ๊ฐ„์—๋งŒ ์งง๊ฒŒ Stop the World๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๋„๋ก ์„ค๊ณ„๋˜์–ด ์žˆ๋‹ค.

Mark and Sweep

Mark and Sweep์€ Mark ์™€ Sweep ๋‹จ๊ณ„๋กœ ๋‚˜๋‰œ๋‹ค.

Mark ๋‹จ๊ณ„์—์„œ ์šฐ์„  ๋ชจ๋“  ๊ฐ์ฒด์˜ mark bit ๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. GC Root๋ถ€ํ„ฐ ์ฐธ์กฐ๋ฅผ ๋”ฐ๋ผ๊ฐ€๋ฉฐ ์‚ด์•„์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ํƒ์ƒ‰ํ•˜๊ณ , ํƒ์ƒ‰ ๊ณผ์ •์—์„œ ์‚ด์•„์žˆ๋Š” ๊ฐ์ฒด์˜ mark bit๋ฅผ ์„ค์ •ํ•œ๋‹ค. ํƒ์ƒ‰์ด ์™„๋ฃŒ๋˜๋ฉด, mark bit๊ฐ€ ์„ค์ •๋œ ๊ฐ์ฒด๋Š” ์‚ด์•„์žˆ๋Š” ๊ฐ์ฒด, ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฐ์ฒด๋Š” ์ฃฝ์€ ๊ฐ์ฒด๊ฐ€ ๋œ๋‹ค.

GC root๋Š” GC์—์„œ ๊ฐ์ฒด์˜ ์ƒ์กด ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ์ค€์ ์ด ๋˜๋Š” ๊ฐ์ฒด ์ง‘ํ•ฉ์ด๋‹ค.

Sweep ๋‹จ๊ณ„์—์„œ GC๋Š” ํž™ ์ „์ฒด๋ฅผ ๋‹ค์‹œ ์ˆœํšŒํ•˜์—ฌ mark bit๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์€ ์ฆ‰, ์ฃฝ์€ ๊ฐ์ฒด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐํ•œ๋‹ค.

Mark and Sweep ๋ฐฉ๋ฒ•์€ ๊ตฌํ˜„์ด ๋‹จ์ˆœํ•˜๊ณ  ํšจ๊ณผ์ ์ด๋‚˜ Sweep ๋‹จ๊ณ„ ์ดํ›„ ๋ฉ”๋ชจ๋ฆฌ์˜ ๋นˆ ๊ณต๊ฐ„์ด ๋ถˆ๊ทœ์น™ํ•˜๊ฒŒ ๋‚จ์•„ ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™”๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ผ๋ถ€ GC ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ Sweep ๋‹จ๊ณ„ ์ดํ›„ Compaction ๋‹จ๊ณ„๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์—ฐ์†๋œ ์—ฌ์œ  ๊ณต๊ฐ„์„ ํ™•๋ณดํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

๐Ÿ“Œย GC์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜

Serial GC

๋‹จ์ผ ์“ฐ๋ ˆ๋“œ์—์„œ ๋ชจ๋“  GC ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. Stop the World ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋ฉˆ์ถ”๋Š” ์‹œ๊ฐ„์ด ๊ธธ ์ˆ˜ ์žˆ๋‹ค. CPU ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ ๊ณ  ๊ตฌํ˜„์ด ๊ฐ„๋‹จํ•˜๋ฉฐ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๋™์ž‘์„ ๋ณด์žฅํ•˜์ง€๋งŒ ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ™˜๊ฒฝ์ด๋‚˜ ๊ทœ๋ชจ๊ฐ€ ํฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ™˜๊ฒฝ์—๋Š” ๋ถ€์ ํ•ฉํ•˜๋‹ค.

Parallel GC

Serial GC์™€ ๋‹ฌ๋ฆฌ ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ Young/Old Generation์—์„œ์˜ GC ์ž‘์—…์„ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๋”ฐ๋ผ์„œ GC์˜ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์˜๋ฏธ ์žˆ๊ฒŒ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

Parallel Old GC

Old Generation ์ „์šฉ Parallel GC์ด๋‹ค.

CMS(Concurrent Mark Sweep) GC

์›…๋‹ต ์†๋„๊ฐ€ ์ค‘์š”ํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•ด ์„ค๊ณ„๋œ low latancy GC์ด๋‹ค. Stop the World ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ฃผ์š” ๋ชฉํ‘œ์ด๋ฉฐ, Mark and Sweep ์ž‘์—…์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์“ฐ๋ ˆ๋“œ์™€ ๋™์‹œ์— ์ง„ํ–‰ํ•˜์—ฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋ฉˆ์ถ”๋Š” ์‹œ๊ฐ„์„ ์ค„์ธ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ CPU ์‚ฌ์šฉ๋Ÿ‰์ด ๋†“๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

G1(Garbage First) GC

๋Œ€์šฉ๋Ÿ‰ ๋ฉ”๋ชจ๋ฆฌ์™€ ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์„œ ํ™˜๊ฒฝ์„ ์œ„ํ•ด ์„ค๊ณ„๋œ ์„œ๋ฒ„์šฉ GC์ด๋‹ค. ํž™์„ ์ˆ˜๋ฐฑ ๊ฐœ์˜ ์ž‘์€ ๊ณต๊ฐ„์œผ๋กœ ๋‚˜๋ˆ„๊ณ , ๊ฐ ๊ณต๊ฐ„์˜ garbage ๋น„์œจ์„ ์ถ”์ ํ•˜์—ฌ ๋งŽ์€ garbage๊ฐ€ ์žˆ๋Š” ๊ณต๊ฐ„๋ถ€ํ„ฐ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์ž‘์—…์„ parellel ๋ฐ concurrentํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•œ๋‹ค.

Shenandoah

๊ทœ๋ชจ๊ฐ€ ์ž‘์€ GC ์ž‘์—…์„ ์ž์ฃผ ์‚ฌ์šฉํ•˜์—ฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋ฉˆ์ถ”๋Š” ์‹œ๊ฐ„์„ ์ผ์ •ํ•˜๊ฒŒ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ด๋‹ค. G1 GC์™€ ์œ ์‚ฌํ•˜๊ธฐ ํž™์„ ์—ฌ๋Ÿฌ ๊ณต๊ฐ„์œผ๋กœ ๋‚˜๋ˆ„์ง€๋งŒ generation์„ ๊ตฌ๋ถ„ํ•˜์—ฌ ๋‚˜๋ˆ„์ง€ ์•Š๋Š”๋‹ค.

ZGC

์ตœ๋Œ€ 16TB์˜ ์ดˆ๋Œ€์šฉ๋Ÿ‰ ํž™์—์„œ๋„ ๋งค์šฐ ์งง์€ ์“ฐ๋ ˆ๋“œ ์ •์ง€ ์‹œ๊ฐ„์„ ๋ณด์žฅํ•˜๋Š” low latency GC์ด๋‹ค. CPU ์ž์›์„ ๋” ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€๋งŒ ์“ฐ๋ ˆ๋“œ ์ •์ง€ ์‹œ๊ฐ„์ด ๊ทน๋„๋กœ ์งง๋‹ค. ๋” ๋ฐœ์ „๋œ GC์ธ Generational GC๋Š” Young, Old Generation์„ ๋…ผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ํšจ์œจ์„ฑ์„ ๋†’์ธ๋‹ค.

๐Ÿ“Œย ์ฐธ๊ณ 

https://velog.io/@recordsbeat/Garbage-Collector-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EC%95%8C%EA%B8%B0

https://mangkyu.tistory.com/118

https://mangkyu.tistory.com/119

This post is licensed under CC BY 4.0 by the author.