๐Ÿค” Java๋Š” ์–ด๋–ป๊ฒŒ Garbage Collection์„ ํ• ๊นŒ?

์˜ค๋ธŒ์ ํŠธ์˜ ์ผ์ƒ

Garbage Collection(GC)์€ ์‰ฝ๊ฒŒ ๋งํ•˜์ž๋ฉด ๋ฉ”๋ชจ๋ฆฌ์— ์“ธ๋ฐ์—†์ด ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ๋“ค์„ ์ •๋ฆฌํ•˜๋Š” ์ž‘์—…์ด๋‹ค. C์—์„  ๊ทธ๋Ÿฐ ์ž‘์—…์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ํ–ˆ๋‹ค.

malloc์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น, free๋กœ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ.

๋งŒ์•ฝ free()๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜์ง€ ์•Š๊ณ  ๊ณ„์† ๋™์ ํ• ๋‹น์„ ์ˆ˜ํ–‰์‹œํ‚จ๋‹ค๋ฉด ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๊ฝ‰ ์ฐจ๋ฒ„๋ฆฌ๊ณ  ๋งŒ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ Java ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ๋•Œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ ์ž‘์—…์„ ํ•˜์ง€ ์•Š๋Š”๋‹ค. ์•„๋ฌด๋ฆฌ ๋งŽ์€ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ์ง€์›Œ๋„ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜๋Š” ์ฝ”๋“œ๋Š” ์–ด๋””์—๋„ ๋“ค์–ด๊ฐ€์ง€ ์•Š๋Š”๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์— ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๊ณ  ๊ฐœ๋ฐœ์„ ํ•ด๋„ ๊ดœ์ฐฎ์€๊ฑธ๊นŒ? JVM์ด GC๋ฅผ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ดœ์ฐฎ๋‹ค.

JVM Memory Structure

GC๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์ „์— ๋จผ์ € ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์‚ดํŽด๋ด์•ผ ํ•œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ํฌ๊ฒŒ ๋„ค๊ฐ€์ง€ ์˜์—ญ์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

  • Stack: ์ง€์—ญ๋ณ€์ˆ˜, ๋ฉ”์†Œ๋“œ, ํŒŒ๋ผ๋ฏธํ„ฐ ๋“ฑ
  • Heap: ๋™์ ํ• ๋‹น๋œ ๋ฐ์ดํ„ฐ
  • Data: static variables
  • Code: ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฐ”์ดํŠธ ์ฝ”๋“œ

data์™€ code์— ๋“ค์–ด๊ฐ„ ๋ฐ์ดํ„ฐ๋Š” ๋Ÿฐํƒ€์ž„ ์ค‘์—” ์ˆ˜์ •๋  ์ผ์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ•œ ์˜์—ญ์œผ๋กœ ์ทจ๊ธ‰ํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ ์ค‘์š”ํ•˜๊ฒŒ ๋ด์•ผํ•  ๊ฒƒ์€ stack๊ณผ heap์ด๋‹ค.

stack์—๋Š” ๋ฉ”์†Œ๋“œ๋“ค์ด ์Œ“์ธ๋‹ค. ์œ„ ๊ทธ๋ฆผ์—์„œ๋Š” do()๊ฐ€ ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ ๋ฉ”์†Œ๋“œ๋‹ค. heap์—๋Š” ์˜ค๋ธŒ์ ํŠธ๋“ค์ด ์Œ“์ธ๋‹ค. ์˜ค๋ธŒ์ ํŠธ๋Š” ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋‚˜ ํด๋ž˜์Šค ์ •๋ณด๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๋ฉ”์†Œ๋“œ์˜ ์ง€์—ญ ๋ณ€์ˆ˜๊ฐ€ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฒŒ ๋œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ do()์˜ ์ˆ˜ํ–‰์ด ๋๋‚œ๋‹ค๋ฉด?

stack์—์„œ do()๊ฐ€ pop๋˜๋ฉฐ Dog1 ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ง€์—ญ ๋ณ€์ˆ˜๊ฐ€ ์‚ฌ๋ผ์ ธ๋ฒ„๋ ธ๋‹ค. ๋” ์ด์ƒ Dog1 ์˜ค๋ธŒ์ ํŠธ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—†๋‹ค. ์ด๋ ‡๊ฒŒ stack์˜ ์ง์—ญ ๋ณ€์ˆ˜๋กœ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ์ด์–ด์ง€์ง€ ์•Š๋Š” ์˜ค๋ธŒ์ ํŠธ๋Š” garbage๊ฐ€ ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ์†Œ๋ฉธํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์–ด์ง„ ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ garbage collector๊ฐ€ ํ•˜๋Š” ์ผ์ด๋‹ค.

Garbage Collection Algorithms

๊ทธ๋Ÿผ ๋ณธ๊ฒฉ์ ์œผ๋กœ GC๊ฐ€ ์ž‘๋™ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ๊ฐ€์žฅ ๋จผ์ € ๋“œ๋Š” ์ƒ๊ฐ์€ ๊ทธ๋ƒฅ ๋ฉ”์†Œ๋“œ๊ฐ€ ๋๋‚ฌ์„ ๋•Œ๋งˆ๋‹ค GC๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค. ํ•˜์ง€๋งŒ ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ ค๋ฉด collector๊ฐ€ ๊ณ„์† ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด์•ผ ํ•˜๊ณ , ์ˆ˜์‹œ๋กœ GC๊ฐ€ ์ผ์–ด๋‚  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๊ทธ๋žจ์˜ ์†๋„๋ฅผ ๋–จ์–ด๋œจ๋ฆฌ๊ณ  ๋งŒ๋‹ค. ๊ทธ๋ž˜์„œ ๋ช‡๊ฐ€์ง€ ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์ด ๊ณ ์•ˆ๋˜์—ˆ๋‹ค.

Reference Counting

์ด ๋ฐฉ์‹์€ ์ฃผ๊ธฐ์ ์œผ๋กœ GC๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ ์˜ค๋ธŒ์ ํŠธ์— ๋ช‡ ๊ฐœ์˜ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š”์ง€ ์ฒดํฌํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

anim ํ•˜๋‚˜๊ฐ€ Dog1 ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ์œผ๋ฏ€๋กœ Dog1์˜ ์นด์šดํ„ฐ๋Š” 1์ด๋‹ค. ์ด์ฒ˜๋Ÿผ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ์ด์–ด์ง€๋ฉด ์นด์šดํ„ฐ๋ฅผ ํ•˜๋‚˜ ๋Š˜๋ฆฌ๊ณ , ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ๋Š๊ธฐ๋ฉด ์นด์šดํ„ฐ๋ฅผ ํ•˜๋‚˜ ์ค„์—ฌ์„œ GC๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ ์นด์šดํ„ฐ๊ฐ€ 0์ธ ๊ฒƒ๋“ค๋งŒ ์ง€์›Œ์ฃผ๋ฉด ๋œ๋‹ค. ๋งค์šฐ ์ง๊ด€์ ์ด๊ณ  ๊ตฌํ˜„์ด ์‰ฌ์šด ๋ฐฉ๋ฒ•์ด๋‹ค. ํ•˜์ง€๋งŒ ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค. ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์„œ๋กœ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์ƒํ™ฉ์ด ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ์‚ฌ์ดํด๋ง๋˜๋ฉด do()์˜ ์ˆ˜ํ–‰์ด ๋๋‚˜๋„ Cat1์ด ์—ฌ์ „ํžˆ Dog1์„ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์นด์šดํ„ฐ๋Š” 0์ด ๋˜์ง€ ์•Š๋Š”๋‹ค. ๋ฌผ๋ก  ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

Tracing

์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ์˜ค๋ธŒ์ ํŠธ์˜ ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ์ถ”์ ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ฒ˜์Œ์—๋Š” stack์˜ ์ง€์—ญ ๋ณ€์ˆ˜์—์„œ ์‹œ์ž‘ํ•ด ํ•ด๋‹น ๋ณ€์ˆ˜๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์ถ”์ ํ•œ๋‹ค. ๋งŒ์•ฝ ์˜ค๋ธŒ์ ํŠธ์— ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋‹ค๋ฉด ์˜ค๋ธŒ์ ํŠธ์˜ marked ๊ฐ’์„ true๋กœ ์„ค์ •ํ•œ๋‹ค.

๋งŒ์•ฝ ์ง€์—ญ ๋ณ€์ˆ˜๋กœ๋ถ€ํ„ฐ์˜ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ๋Š๊ธฐ๋ฉด ์—ฐ๊ฒฐ๋œ ์˜ค๋ธŒ์ ํŠธ๋“ค์˜ marked ๊ฐ’์„ false๋กœ ์„ค์ •ํ•œ๋‹ค. GC๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ๋Š” marked ๊ฐ’์ด false์ธ ์˜ค๋ธŒ์ ํŠธ๋“ค๋งŒ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œํ•˜๋ฉด ๋œ๋‹ค.

๊ดœ์ฐฎ์•„ ๋ณด์ธ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์—ฌ๊ธฐ์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•  ๋•Œ ํ•œ๊ฐ€์ง€ ์‹ ๊ฒฝ์จ์•ผ ํ•  ์ด์Šˆ๊ฐ€ ์žˆ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜๊ณ  ๋‚˜๋ฉด ์ด๋ ‡๊ฒŒ ๋นˆ ๊ณต๊ฐ„์ด ์ƒ๊ธฐ๊ฒŒ ๋œ๋‹ค. ์ด๋Ÿฐ ์‹์œผ๋กœ ๋นˆ ๊ณต๊ฐ„์ด ๋Š˜์–ด๋‚˜๋ฉด ์ƒˆ๋กœ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น ๋  ๋•Œ ์ € ํ‹ˆ์„ ๋น„์ง‘๊ณ  ๋“ค์–ด๊ฐ€์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•˜๋ฉฐ, ์ด๋ ‡๊ฒŒ ๋˜๋ฉด ์ „์ฒด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์€ ์ถฉ๋ถ„ํ•œ๋ฐ ๋“ค์–ด๊ฐˆ ํ‹ˆ์ด ์—†์–ด์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜์ง€ ๋ชปํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค. ๋ณ„๋กœ ํšจ์œจ์ ์ด์ง€ ์•Š๋‹ค.

๋”ฐ๋ผ์„œ ์ด๋ฏธ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ•œ์ชฝ์œผ๋กœ ๋ชจ์•„์ฃผ๋Š” compacting ์ž‘์—…์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค. ์ด๊ฒƒ๋„ GC๊ณผ์ •์—์„œ ์ˆ˜ํ–‰๋œ๋‹ค. tracing๊ณผ compacting์€ ์‹ค์ œ๋กœ JVM์˜ garbage collector๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋ฉฐ, tracing์€ 'mark-and-sweepโ€™์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค. ์ž, ๊ทธ๋Ÿฐ๋ฐ GC๋ฅผ ๋” ํšจ์œจ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค.

Generational GC

์ด ๋ถ€๋ถ„์ด GC์˜ ํ•ต์‹ฌ์ด๋‹ค. GC๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋งค์šฐ ํฐ ์ž‘์—…์ด๋‹ค. GC๊ฐ€ ์ˆ˜ํ–‰๋  ๋•Œ๋Š” JVM์ด stop-the-world๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ๋‹ค. stop-the-wold๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ๋ชจ๋‘ ๋ฉˆ์ถ”๊ณ  GC๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. generaltional GC๋Š” ์•„์˜ˆ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ž‘์—…๋Ÿ‰์„ ์กฐ์ ˆํ•ด ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ์ค„์ธ๋‹ค. ์ด ๋ฐฉ์‹์€ ํ†ต๊ณ„์  ๊ด€์ฐฐ์—์„œ ์ถœ๋ฐœํ–ˆ๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ์˜ค๋ธŒ์ ํŠธ๋Š” ์ƒ์„ฑ ์ดํ›„ ๊ธˆ๋ฐฉ garbage๊ฐ€ ๋œ๋‹ค!

๊ทธ๋ ‡๋‹ค! ์˜ค๋ธŒ์ ํŠธ๋Š” ๋งŒ๋“ค์–ด์ง„์ง€ ์–ผ๋งˆ๋˜์ง€ ์•Š์•„ ๊ธˆ๋ฐฉ ๋ ˆํผ๋Ÿฐ์Šค๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค. ์ด ๊ด€์ฐฐ์„ ํ™œ์šฉํ•ด GC์˜ ํšจ์œจ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด JVM์€ heap์˜ ์˜์—ญ์„ ์„ธ๋Œ€๋ณ„๋กœ ์ชผ๊ฐœ ๊ด€๋ฆฌํ•œ๋‹ค.

Eden, S0, S1, Tenured, Permanent ์˜์—ญ.

eden, S0, S1์€ ์ƒ์„ฑ๋œ์ง€ ์–ผ๋งˆ๋˜์ง€ ์•Š์€ ์˜ค๋ธŒ์ ํŠธ๋“ค์ด ์Œ“์ด๋Š” ๊ณต๊ฐ„์ด๊ธฐ ๋•Œ๋ฌธ์— young generation์ด๋ผ๊ณ  ๋ถ€๋ฅด๋ฉฐ, ๋ฐ˜๋Œ€๋กœ tenured์™€ permanent๋Š” old generation์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์ˆœ์„œ๋Œ€๋กœ ์‚ดํŽด๋ณด์ž.

  • Eden: ์—๋ด๋™์‚ฐํ•  ๋•Œ ๊ทธ ์—๋ด์ด๋‹ค. ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์ฒ˜์Œ ์ƒ์„ฑ๋์„ ๋•Œ eden์— ๋“ค์–ด๊ฐ„๋‹ค.
  • S0, S1: ์ƒ์„ฑ๋œ ์ดํ›„ ์‹œ๊ฐ„์ด ์กฐ๊ธˆ ํ˜๋ €์„ ๋•Œ garbage๊ฐ€ ๋˜์ง€ ์•Š์€ ์˜ค๋ธŒ์ ํŠธ๋“ค์ด eden์—์„œ ์ด๊ณณ์œผ๋กœ ์˜ฎ๊ฒจ์ง„๋‹ค. ์‚ด์•„๋‚จ์€ ์˜ค๋ธŒ์ ํŠธ๋“ค์ด ๋“ค์–ด๊ฐ„๋‹ค๊ณ  ํ•ด์„œ survivor space๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • Tennured: ์˜ค๋ž˜ ์‚ด์•„์žˆ์„ ํ™•๋ฅ ์ด ๋†’์€ ์˜ค๋ธŒ์ ํŠธ๋“ค์ด ๋“ค์–ด๊ฐ„๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ๊ฑฐ์˜ GC๊ฐ€ ์ˆ˜ํ–‰๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์ •๋…„๋ณด์žฅ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.
  • Permanent: ํ”„๋กœ๊ทธ๋žจ์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ์‚ด์•„์žˆ์„ ์˜ค๋ธŒ์ ํŠธ๋“ค์ด ๋“ค์–ด๊ฐ„๋‹ค.

์ด๋ ‡๊ฒŒ heap์„ ๋‚˜๋ˆ  ๊ฐ ์˜์—ญ์— ๋Œ€ํ•ด์„œ๋งŒ GC๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ์„ฑ๋Šฅ์„ ๋” ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค. ๊ตฌ์ฒด์ ์ธ ์ˆ˜ํ–‰ ์ ˆ์ฐจ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๊ณ„์† ์ƒ์„ฑ๋˜์–ด eden์ด ์–ด๋Š์ •๋„ ์ฐจ๋ฉด eden์—์„œ GC๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ garbage๊ฐ€ ์•„๋‹Œ ์˜ค๋ธŒ์ ํŠธ๋“ค์„ S0๋กœ ๋ณต์‚ฌํ•˜๊ณ , eden์„ ๋น„์šด๋‹ค.
  2. eden์—์„œ ๋ช‡ ๋ฒˆ GC๊ฐ€ ์ด๋ค„์ง€๋ฉด S0์— ์‚ด์•„๋‚จ์€ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์Œ“์ธ๋‹ค. ์ด๋ ‡๊ฒŒ S0๊ฐ€ ๊ฐ€๋“์ฐจ๋ฉด eden๊ณผ S0์—์„œ GC๋ฅผ ์ˆ˜ํ–‰ํ•ด garbage๊ฐ€ ์•„๋‹Œ ์˜ค๋ธŒ์ ํŠธ๋“ค์„ S1์œผ๋กœ ๋ณต์‚ฌํ•˜๊ณ  eden๊ณผ S0๋ฅผ ๋น„์šด๋‹ค.
  3. ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ S1์ด ๊ฐ€๋“์ฐจ๋ฉด eden๊ณผ S1์—์„œ GC๋ฅผ ์ˆ˜ํ–‰ํ•ด garbage๊ฐ€ ์•„๋‹Œ ์˜ค๋ธŒ์ ํŠธ๋“ค์„ S0๋กœ ๋ณต์‚ฌํ•˜๊ณ  eden๊ณผ S1์„ ๋น„์šด๋‹ค. ์ด๋ ‡๊ฒŒ S0์™€ S1์„ ์™”๋‹ค๊ฐ”๋‹ค ํ•˜๋ฉด์„œ ์ฃผ๊ธฐ์ ์œผ๋กœ GC๊ฐ€ ์ˆ˜ํ–‰๋œ๋‹ค.
  4. ์œ„ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋‹ค๋ณด๋ฉด ์œ ๋‚œํžˆ ์˜ค๋ž˜ ์‚ด์•„๋‚จ๋Š” ์˜ค๋ธŒ์ ํŠธ๋“ค์ด ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ ์˜ค๋ธŒ์ ํŠธ์˜ age counter๊ฐ€ ์ผ์ • ์ด์ƒ์ด๋ผ๋ฉด tenured๋กœ ๋ณด๋‚ด S0์™€ S1์ด ๊ฐ€๋“์ฐจ์ง€ ์•Š๋„๋ก ๋งŒ๋“ค์–ด์ค€๋‹ค.

์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์‚ด์•„๋‚จ์•„ ๋‹ค์Œ ์„ธ๋Œ€๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ์„ promote๋ผ๊ณ  ํ‘œํ˜„ํ•œ๋‹ค. ๋˜ํ•œ young generation์—์„œ ์ผ์–ด๋‚˜๋Š” GC๋ฅผ minor GC๋ผ๊ณ  ๋ถ€๋ฅด๊ณ , old generation์—์„œ ์ผ์–ด๋‚˜๋Š” GC๋ฅผ major GC๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. minor GC๋Š” ์ž์ฃผ, ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰๋œ๋‹ค. ๋ฐ˜๋Œ€๋กœ major GC๋Š” ๊ฐ€๋”, ๋Š๋ฆฌ๊ฒŒ ์ˆ˜ํ–‰๋œ๋‹ค.

์ด๋ ‡๊ฒŒ Java์˜ GC์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํžˆ ์•Œ์•„๋ดค๋‹ค. ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰๋˜๋Š” GC๋ฅผ ๋ฏฟ์ง€ ์•Š๊ณ  System.gc() ๋ฉ”์†Œ๋“œ๋ฅผ ํ˜ธ์ถœํ•ด ๊ฐœ๋ฐœ์ž๊ฐ€ ๊ฐ•์ œ๋กœ GC๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, ์ ˆ๋Œ€ ์‚ฌ์šฉํ•˜์ง€ ๋ง ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค. ์„ฑ๋Šฅ์„ ํฌ๊ฒŒ ๋–จ์–ดํŠธ๋ฆด ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋งค์šฐ ๋น„ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์ด๋‹ค. ์‹ฌ์ง€์–ด ์œ„ํ—˜ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ๊ผญ ๋ช…์‹œ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ฐจ๋ผ๋ฆฌ ์˜ค๋ธŒ์ ํŠธ์— null์„ ํ• ๋‹นํ•ด ๋ ˆํผ๋Ÿฐ์Šค๋ฅผ ๋Š๋Š” ๊ฒƒ์ด ๋”์šฑ ์•ˆ์ „ํ•˜๋‹ค.