[CS-JAVA] Garbage Collection

์ง€์˜ยท2023๋…„ 8์›” 23์ผ
0

CS

๋ชฉ๋ก ๋ณด๊ธฐ
63/77

๐Ÿค” ๋“ค์–ด๊ฐ€๊ธฐ ์ „์—..

  • C/C++์—์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ˆ„์ˆ˜(Memory Leak)์„ ๋ง‰๊ธฐ ์œ„ํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ํ›„, ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ง์ ‘ ํ•ด์ œํ•ด์ฃผ์–ด์•ผ ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ JAVA์—์„œ๋Š” JVM์ด ๊ตฌ์„ฑ๋œ JRE(Java Runtime Environment)๊ฐ€ ์ œ๊ณต๋˜๋ฉฐ, ๊ทธ ๊ตฌ์„ฑ์š”์†Œ ์ค‘ ํ•˜๋‚˜์ธ Garbage Collection์ด ์ž๋™์œผ๋กœ ๋‚ญ๋น„๋˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ํŒŒ๊ดดํ•ฉ๋‹ˆ๋‹ค.
  • stop-the-world๋ž€? : Garbage Collection๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด JVM์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์„ ๋ฉˆ์ถ”๋Š” ๊ฒƒ์ด๋‹ค. ์–ด๋–ค GC(*Garbage Colletion)์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ stop-the-world๋Š” ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ GCํŠœ๋‹์€ ์ดstop-the-world ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ๊ฒƒ์ด๋‹ค.
  • GC๋ฅผ ํ•ด๋„ ๋”์ด์ƒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด ์—†๋Š”๋ฐ ๊ณ„์† ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋ ค๊ณ  ํ•˜๋ฉด, OutOfMemoryError๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ WAS๊ฐ€ ๋‹ค์šด๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ํ–‰(Hang) ์ฆ‰, ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌ ๋ชปํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๊ทœ๋ชจ ์žˆ๋Š” JAVA ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํšจ์œจ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” GC์— ๋Œ€ํ•ด ์ž˜ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

  • Garbage๋ž€, ์‚ฌ์šฉ๋˜์–ด ์ง€์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ์ง€๋งŒ, ๋ฐฉ์ถœ๋˜์ง€ ์•Š์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋œปํ•œ๋‹ค.

  • ์‚ฌ์šฉ๊ณผ ๋ฐฉ์ถœ์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ์˜ ๋ผ์ดํ”„ ์‹ธ์ดํด์„ ์•Œ์•„์•ผ ํ•œ๋‹ค.

    ๋ฉ”๋ชจ๋ฆฌ๋Š” ์œ„์˜ 3๋‹จ๊ณ„์ฒ˜๋Ÿผ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น > ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ > ๋ฉ”๋ชจ๋ฆฌ ๋ฐฉ์ถœ ์ˆœ์„œ์ด๋‹ค. ์—ฌ๊ธฐ์„œ ๋งํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ์•Œ์•„๋ณด๋ฉด Garbage Collection์„ ๋” ์ž˜ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ฉ”๋ชจ๋ฆฌ๋ž€, 0,1๋กœ ํ‘œํ˜„๋˜์–ด์ง€๋Š” ์–ด๋– ํ•œ ๊ฐ’์ด ์–ด๋”˜๊ฐ€์— ์ €์žฅ์ด ๋˜์–ด์ ธ์žˆ๊ณ , ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ทธ ์ฃผ์†Œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์€ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์“ฐ๊ฑฐ๋‚˜ ์ฝ๋Š”๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์—ฌ๊ธฐ์„œ ๋ฉ”๋ชจ๋ฆฌ ๋ฐฉ์ถœ์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? release๋˜์ง€ ์•Š์€ ์ƒํƒœ์ด๋ฏ€๋กœ, ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ์ถ”์ ํ•˜๊ณ  ์–ธ์ œ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋”์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๊ณ  ์žˆ๋Š”์ง€๋ฅผ ํŒŒ์•…ํ•˜์—ฌ ์ž๋™ ํšŒ์ˆ˜ํ•œ๋‹ค.

  • ์ฆ‰, ์•„๋ž˜์™€ ๊ฐ™์€ ๊ฒฝ์šฐ๊ฐ€ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ํšŒ์ˆ˜ํ•  ๋Œ€์ƒ์ด ๋œ๋‹ค.

    ์ด์ฒ˜๋Ÿผ ๊ฐ์ฒด๊ฐ€ ์‹ค์งˆ์ ์œผ๋กœ ์žˆ๋Š” Heap์˜์—ญ์—์„œ ์•„๋ฌด๊ณณ์—์„œ๋„ ์ฐธ์กฐ๋˜์ง€ ์•Š์€ ๊ฐ์ฒด(๋นจ๊ฐ„์ƒ‰)๋Š” ์‚ญ์ œ ๋Œ€์ƒ์ด ๋œ๋‹ค.

์˜ˆ์‹œ)
   1. ๊ฐ์ฒด๊ฐ€ null์ธ ๊ฒฝ์šฐ (์˜ˆ: String str = null)
   2. ๋ธ”๋Ÿญ ์‹คํ–‰ ์ข…๋ฃŒ ํ›„, ๋ธ”๋Ÿญ ์•ˆ์—์„œ ์ƒ์„ฑ๋œ ๊ฐ์ฒด
   3. ๋ถ€๋ชจ ๊ฐ์ฒด๊ฐ€ null์ธ ๊ฒฝ์šฐ, ํฌํ•จํ•˜๋Š” ์ž์‹ ๊ฐ์ฒด

GC์˜ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ ๊ณผ์ •

1. Marking


๋จผ์ € ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋งˆํ‚น์„ ํ˜ธ์ถœํ•œ๋‹ค. ์ด ์ˆœ์„œ์—์„œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์‚ฌ์šฉ๋˜๋Š”์ง€ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จ(์‹๋ณ„)ํ•œ๋‹ค. ์ฐธ์กฐ๋˜๋Š” ๊ฐ์ฒด๋Š” ํŒŒ๋ž€์ƒ‰, ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋Š” ์ฃผํ™ฉ์ƒ‰์œผ๋กœ ๋ณด์—ฌ์ง„๋‹ค. ๋งˆํ‚น๋‹จ๊ณ„์—์„œ๋Š” ๋ชจ๋“  ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์Šค์บ”ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ธด ์‹œ๊ฐ„์ด ์†Œ๋ชจ๋œ๋‹ค.

2. Normal Deletion


์ฐธ์กฐ๋˜์ง€ ์•Š์€ ๊ฐ์ฒด(Unreachable, ์ฃผํ™ฉ์ƒ‰)์€ ์ œ๊ฑฐํ•˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ Allocator๋Š” ๋ฐ˜ํ™˜๋˜์–ด ๋น„์–ด์ง„ ๋ธ”๋Ÿญ์˜ ์ฐธ์กฐ ์œ„์น˜๋ฅผ ์ €์žฅํ•ด ๋‘์—ˆ๋‹ค๊ฐ€ ์ƒˆ๋กœ์šด ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์„ ์–ธ๋˜๋ฉด ํ• ๋‹นํ•ด์ค€๋‹ค.

3. Compacting


ํผํฌ๋จผ์Šค ํ–ฅ์ƒ์„ ์œ„ํ•ด, ์ฐธ์กฐ๋˜์ง€ ์•Š์€ ๊ฐ์ฒด(์ฃผํ™ฉ์ƒ‰)์„ ์ง€์› ๋‹ค๋ฉด ๋‚จ์•„์žˆ๋Š” ์ฐธ์กฐ๋œ ๊ฐ์ฒด(Reachable)๋ฅผ ๋ฌถ์–ด๋†“๋Š”๋‹ค. ์ด๋“ค์„ ๋ฌถ์Œ์œผ๋กœ์„œ ๊ณต๊ฐ„์ด ์ƒ๊ธฐ๊ฒŒ ๋˜๋ฏ€๋กœ, ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•  ๋•Œ ๋” ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

โœ” GC์˜ ๋™์ž‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜(๋™์ž‘๊ณผ์ •๋„ ๋™์ผ)


๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ๋™์ž‘ํ•˜๋Š” ์›๋ฆฌ๋กœ ๋ฃจํŠธ์—์„œ๋ถ€ํ„ฐ ํ•ด๋‹น ๊ฐ์ฒด์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ์ง€์— ๋Œ€ํ•œ ์—ฌ๋ถ€๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ์˜ ๊ธฐ์ค€์œผ๋กœ ์‚ผ์Šต๋‹ˆ๋‹ค. Mark And Sweep์€ ์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ด 3๊ฐ€์ง€ ๊ณผ์ •์œผ๋กœ ๋‚˜๋‰˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

  • Mark ๊ณผ์ • : ๋จผ์ € Root๋กœ๋ถ€ํ„ฐ ๊ทธ๋ž˜ํ”„ ์ˆœํšŒ๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋œ ๊ฐ์ฒด๋“ค์„ ์ฐพ์•„๋‚ด์–ด ๊ฐ๊ฐ ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์ž ์กฐํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ฐพ์•„์„œ ๋งˆํ‚นํ•ฉ๋‹ˆ๋‹ค.
  • Sweep ๊ณผ์ • : ์ฐธ์กฐํ•˜๊ณ  ์žˆ์ง€ ์•Š์€ ๊ฐ์ฒด ์ฆ‰ Unreachable ๊ฐ์ฒด๋“ค์„ Heap์—์„œ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค.
  • Compact ๊ณผ์ • : Sweep ํ›„์— ๋ถ„์‚ฐ๋œ ๊ฐ์ฒด๋“ค์„ Heap์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋กœ ๋ชจ์•„ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋œ ๋ถ€๋ถ„๊ณผ ๊ทธ๋ ‡์ง€ ์•Š์€ ๋ถ€๋ถ„์œผ๋กœ ์••์ถ•ํ•ฉ๋‹ˆ๋‹ค. (๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Œ)

Generational GC

๊ฐ์ œ๋“ค์˜ ์„ธ๋Œ€(generation)๋ฅผ ๋ถ„๋ฆฌํ•˜๊ณ , ๋Œ€๋ถ€๋ถ„์˜ GC์‚ฌ์ดํด์—์„œ ํŠน์ • ์„ธ๋Œ€์— ๋Œ€ํ•ด์„œ๋งŒ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ

Generational GC์˜ ๋ฐฐ๊ฒฝ


GC์˜ ๋™์ž‘ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ธ Mark & Compact๋Š” JVM์—๊ฒŒ ๋น„ํšจ์œจ์ ์ด๋‹ค. ์œ„์˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ์‹œ๊ฐ„์ด ์ง€๋‚  ์ˆ˜๋ก ์ ์€ ๊ฐ์ฒด๋งŒ ๋‚จ๋Š” ๊ฒƒ์„ ๋ณด๊ณ  Weak Generational Hypothesis๊ฐ€ ๋Œ€๋‘๋˜์—ˆ๋‹ค.

  • Weak Generational Hypothesis : ์‹ ๊ทœ๋กœ ์ƒ์„ฑํ•œ ๊ฐ์ฒด์˜ ๋Œ€๋ถ€๋ถ„์€ ๊ธˆ๋ฐฉ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ๊ฐ€ ๋˜๊ณ , ์˜ค๋ž˜๋œ ๊ฐ์ฒด์—์„œ ์‹ ๊ทœ ๊ฐ์ฒด๋กœ์˜ ์ฐธ์กฐ๋Š” ๋งค์šฐ ์ ๊ฒŒ ์กด์žฌํ•œ๋‹ค๋Š” ๊ฐ€์„ค. ์ฆ‰, ๊ฐ์ฒด๋Š” ๋Œ€๋ถ€๋ถ„ ์ผํšŒ์„ฑ๋˜๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ์— ์˜ค๋žซ๋™์•ˆ ๋‚จ์•„์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ๋“œ๋ฌผ๋‹ค๋Š” ๊ฒƒ. ํ•ด๋‹น ๊ฐ€์„ค์„ ๊ธฐ๋ฐ˜์œผ๋กœ young/old์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ถ„ํ• ํ•˜์˜€๋‹ค.

Generational GC ๊ตฌ์กฐ

  1. Young ์˜์—ญ
    ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑํ•œ ๊ฐ์ฒด์˜ ์˜์—ญ. ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๊ฐ€ ๊ธˆ๋ฐฉ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ ์ƒํƒœ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๋งŽ์€ ๊ฐ์ฒด๊ฐ€ Young ์˜์—ญ์— ์ƒ์„ฑ๋˜์—ˆ๋‹ค๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค. ์ด ์˜์—ญ์—์„œ ๊ฐ์ฒด๊ฐ€ ์‚ฌ๋ผ์งˆ๋•Œ Minor GC ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  2. Old ์˜์—ญ
    Young์˜์—ญ์—์„œ Reachable์ƒํƒœ๋กœ ์˜ค๋žซ๋™์•ˆ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๊ฐ€ ๋ณต์‚ฌ๋˜๋Š” ์˜์—ญ. ๋Œ€๋ถ€๋ถ„ Young ์˜์—ญ๋ณด๋‹ค ํฌ๊ฒŒ ํ• ๋‹นํ•˜๋ฉฐ, ํฌ๊ธฐ๊ฐ€ ํฐ ๋งŒํผ Young ์˜์—ญ๋ณด๋‹ค GC๋Š” ์ ๊ฒŒ ๋ฐœ์ƒํ•œ๋‹ค. ์ด ์˜์—ญ์—์„œ ๊ฐ์ฒด๊ฐ€ ์‚ฌ๋ผ์งˆ ๋•Œ Major GC๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

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

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

  • Eden ์˜์—ญ: ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น(Allocation)๋˜๋Š” ์˜์—ญ
  • Survivor ์˜์—ญ: ์ตœ์†Œ 1๋ฒˆ์˜ GC ์ด์ƒ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š” ์˜์—ญ
  1. ๊ฐ์ฒด๊ฐ€ ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋˜๋ฉด ๋จผ์ € Elden์˜์—ญ์— ํ• ๋‹น๋œ๋‹ค.
  2. ๊ฐ์ฒด๊ฐ€ ๊ณ„์† ์ƒ์„ฑ๋˜์–ด Elden์˜์—ญ์ด ๊ฝ‰์ฐจ๊ฒŒ ๋˜๊ณ  Minor GC๊ฐ€ ์‹คํ–‰๋œ๋‹ค.
    2-1. Eden ์˜์—ญ์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•ด์ œ๋œ๋‹ค.
    2-2. Eden ์˜์—ญ์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” 1๊ฐœ์˜ Survivor ์˜์—ญ์œผ๋กœ ์ด๋™๋œ๋‹ค.
  3. 1~2๋ฒˆ์˜ ๊ณผ์ •์ด ๋ฐ˜๋ณต๋˜๋‹ค๊ฐ€ Survivor ์˜์—ญ์ด ๊ฐ€๋“ ์ฐจ๊ฒŒ ๋˜๋ฉด Survivor ์˜์—ญ์˜ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฅธ Survivor ์˜์—ญ์œผ๋กœ ์ด๋™์‹œํ‚จ๋‹ค.(๋”ฐ๋ผ์„œ 1๊ฐœ์˜ Survivor ์˜์—ญ์€ ๋ฐ˜๋“œ์‹œ ๋นˆ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.)
  4. ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜์—ฌ ๊ณ„์†ํ•ด์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” Old ์˜์—ญ์œผ๋กœ ์ด๋™(Promotion)๋œ๋‹ค.
  • ๊ฐ์ฒด์˜ ์ƒ์กด ํšŸ์ˆ˜๋ฅผ ์นด์šดํŠธํ•˜๊ธฐ ์œ„ํ•ด age๋ฅผ Object Header์— ๊ธฐ๋กํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Minor GC ๋•Œ Object Header์— ๊ธฐ๋ก๋œ age๋ฅผ ๋ณด๊ณ  Promotion ์—ฌ๋ถ€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค.

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

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

*๐Ÿค” : Young ์˜์—ญ์€ ์ผ๋ฐ˜์ ์œผ๋กœ Old ์˜์—ญ๋ณด๋‹ค ํฌํ‚ค๊ฐ€ ์ž‘๊ธฐ ๋•Œ๋ฌธ์— GC๊ฐ€ ๋ณดํ†ต 0.5์ดˆ์—์„œ 1์ดˆ ์‚ฌ์ด์— ๋๋‚œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Minor GC๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ํฌ๊ฒŒ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค. ํ•˜์ง€๋งŒ Old ์˜์—ญ์€ Young ์˜์—ญ๋ณด๋‹ค ํฌ๋ฉฐ Young ์˜์—ญ์„ ์ฐธ์กฐํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— Major GC๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ Minor GC๋ณด๋‹ค ์‹œ๊ฐ„์ด ์˜ค๋ž˜๊ฑธ๋ฆฐ๋‹ค.







*์ฐธ๊ณ  : https://github.com/GimunLee/tech-refrigerator/blob/master/Language/JAVA/Garbage%20Collection.md#garbage-collection, https://mangkyu.tistory.com/118, https://coding-factory.tistory.com/829
profile
๊พธ์ค€ํ•จ์˜ ํž˜์„ ์•„๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค ๐Ÿ“

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