๋ฐ˜์‘ํ˜•

0.๐Ÿšถ๋“ค์–ด๊ฐ€๋ฉฐ

 ์ด์ „ ๊ธ€์—์„œ JVM์˜ ์ค‘์š”ํ•œ ์—ญํ•  ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ผ๊ณ  ์†Œ๊ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. ์ž๋ฐ”์—์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ(GC)๋ฅผ ์‚ฌ์šฉํ•ด ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” GC์— ๋Œ€ํ•ด ์†Œ๊ฐœํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.


1.๐Ÿ’ปGarbage Collection(GC)์ด๋ž€?

 ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœํ•˜๋‹ค ๋ณด๋ฉด ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฉ”๋ชจ๋ฆฌ์ธ ๊ฐ€๋น„์ง€๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. C์–ธ์–ด๋ฅผ ์ด์šฉํ•˜๋ฉด free()๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•ด์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์ด๋Š” ๋ฌธ์ œ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

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

 

 Java์˜ GC๋Š” ๋™์ž‘ ๋ฐฉ์‹์— ๋”ฐ๋ผ ๋งค์šฐ ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜๊ฐ€ ์žˆ์ง€๋งŒ ๊ณตํ†ต์ ์œผ๋กœ ๋‹ค์Œ 2๊ฐ€์ง€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. 2๊ฐ€์ง€ ์ž‘์—…์„ ๊ฐ๊ฐ Mark, Sweep์ด๋ผ ํ•˜๊ณ  Garbarge Collection์„ Mark and Sweep ์ด๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค.

  1. Heap ๋‚ด์˜ ๊ฐ์ฒด ์ค‘์—์„œ garbage๋ฅผ ์ฐพ์•„๋‚ธ๋‹ค. (Mark)
  2. ์ฐพ์•„๋‚ธ garbage๋ฅผ ์ฒ˜๋ฆฌํ•ด์„œ heap์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšŒ์ˆ˜ํ•œ๋‹ค. (Sweep)

# garbage๋ž€?

  • Heap ์˜์—ญ์˜ ์˜ค๋ธŒ์ ํŠธ ์ค‘ stack์—์„œ ๋„๋‹ฌ ๋ถˆ๊ฐ€๋Šฅํ•œ(Unreachable) ์˜ค๋ธŒ์ ํŠธ๋“ค์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

2.๐ŸงนGarbage Collection ๊ณผ์ •

 JVM์€ heap์˜์—ญ์—์„œ ๊ฐ์ฒด๋“ค์„ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด heap ๋‚ด์—์„œ๋„ ์˜์—ญ์„ ๋‚˜๋ˆ ์„œ ๊ด€๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

Java heap ์˜์—ญ

 ๊ด€์‹ฌ ๊ฐ€์งˆ ๋ถ€๋ถ„์€ Young generation๊ณผ Old generation์ž…๋‹ˆ๋‹ค. ๋‹จ์–ด๋งŒ ๋ด๋„ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๋“ฏ Young generation์—๋Š” ์ƒ๊ธด์ง€ ์–ผ๋งˆ ์•ˆ ๋œ ๊ฐ์ฒด๋“ค์ด, Old generation์—๋Š” ์ƒ๊ธด ์ง€ ์˜ค๋ž˜๋œ ๊ฐ์ฒด๋“ค์ด ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

 

 Garbage Collection ๊ณผ์ •์„ ์‚ดํŽด๋ณด๋ฉฐ ์ด์— ๋Œ€ํ•ด ์ข€ ๋” ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

1) Young generation์—์„œ์˜ GC (Minor GC)

 GC๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๋Œ€๋ถ€๋ถ„์˜ ์‹ ์ƒ ๊ฐ์ฒด๋“ค์ด ์ €์žฅ๋˜๋Š” Young ์˜์—ญ์— ๋Œ€ํ•ด ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. Young ์˜์—ญ์—์„œ ๋ฒŒ์–ด์ง€๋Š” GC๋ฅผ Minor GC๋ผ๊ณ  ์ง€์นญํ•จ์„ ๋จผ์ € ์•Œ๋ฆฌ๊ณ  ๊ธ€์„ ์ง„ํ–‰ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 Young ์˜์—ญ์€ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด 3๊ฐœ์˜ ์˜์—ญ์œผ๋กœ ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.

  • Eden ์˜์—ญ
  • Survival ์˜์—ญ 2๊ฐœ

 ๊ทธ๋Ÿฌ๋ฉด ์ด์ œ Young ์˜์—ญ์— ๋Œ€ํ•ด Minor GC๊ฐ€ ์–ด๋–ป๊ฒŒ ์ผ์–ด๋‚˜๋Š”์ง€ ์ˆœ์„œ์— ๋”ฐ๋ผ ์„ค๋ช…ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

  • ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๋Š” Eden ์˜์—ญ์— ์œ„์น˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
  • ๊ฐ์ฒด๊ฐ€ ๊ณ„์†ํ•˜์—ฌ ์ƒ์„ฑ๋˜์–ด Eden ์˜์—ญ์ด ๋‹ค ์ฐจ๊ฒŒ ๋˜๋ฉด Minor GC๊ฐ€ ์ผ์–ด๋‚˜๊ณ  ์—ฌ๊ธฐ์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” Survivor ์˜์—ญ ์ค‘ ํ•˜๋‚˜๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. (๊ฐ€์ •: Survivor ์˜์—ญ ๋‘ ๊ฐœ ์ค‘ ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜์˜ ์˜์—ญ์€ ๋น„์–ด์žˆ๋‹ค.)
  • ์œ„ ๊ณผ์ •์ด ๋ฐ˜๋ณต๋˜๋ฉด ๋น„์–ด์žˆ์ง€ ์•Š์€ Survivor ์˜์—ญ์ด ๊ฐ€๋“ ์ฐจ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋•Œ ๋‹ค์‹œ ํ•œ๋ฒˆ Minor GC๊ฐ€ ์ผ์–ด๋‚˜๊ณ  ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์ด ๋น„์–ด์žˆ๋˜ Survivor ์˜์—ญ์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ์ด์ „์— ์‚ฌ์šฉํ•˜๋˜ Survivor ์˜์—ญ์€ ๋น„์›Œ์ง‘๋‹ˆ๋‹ค.
  • ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋‹ค๊ฐ€ ๊ณ„์†ํ•ด์„œ ์‚ด์•„๋‚จ์•„ ์žˆ๋Š” ๊ฐ์ฒด๋Š” Old ์˜์—ญ์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด ๊ณผ์ •์„ Promotion์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

 ์ด ๊ณผ์ •์„ ๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

2) Old generation์—์„œ์˜ GC (Major GC)

 Minor GC๊ฐ€ ๊ณ„์† ์ผ์–ด๋‚˜ Old generation ์˜์—ญ์œผ๋กœ Promotion ๋˜๋Š” ๊ฐ์ฒด๊ฐ€ ๋งŽ์•„์ง€๋ฉด Old ์˜์—ญ์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ด์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ ์ผ์–ด๋‚˜๋Š” GC๊ฐ€ ๋ฐ”๋กœ Major GC์ž…๋‹ˆ๋‹ค. Young ์˜์—ญ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ํฌ๊ธฐ๊ฐ€ Old ์˜์—ญ๋ณด๋‹ค ํฌ๊ธฐ๊ฐ€ ์ž‘์•„ GC๊ฐ€ ๊ธˆ๋ฐฉ ๋๋‚˜๋Š” ๋ฐ˜๋ฉด Old ์˜์—ญ์€ ํฌ๊ธฐ๊ฐ€ ์ปค GC ํ•˜๋Š”๋ฐ ๋“œ๋Š” ๋น„์šฉ์ด ํฝ๋‹ˆ๋‹ค.


3.๐Ÿ“šGarbage Collection ์ข…๋ฅ˜

 Garbage Collection๋„ ๋ฐฉ์‹์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌ ์ ˆ์ฐจ๊ฐ€ ๋‹ฌ๋ผ์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. JVM ๋ฒ„์ „์ด ์˜ฌ๋ผ๊ฐ์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ GC ๋ฐฉ์‹์ด ์ถ”๊ฐ€๋˜๊ณ  ๋ฐœ์ „๋˜์–ด์™”๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ƒํ™ฉ์— ๋งž๊ฒŒ GC๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ๋„ ์ค‘์š”ํ•˜๊ณ  ํ•˜๋Š”๋ฐ์š”.

 

 ์ด ๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์–ด๋””๊นŒ์ง€ ๋‚ด์šฉ ์ •๋ฆฌ๋ฅผ ํ•ด์•ผ ํ• ๊นŒ ๊ณ ๋ฏผํ•˜๋‹ค ํ˜„์žฌ ์ œ ์‹ค๋ ฅ์œผ๋กœ๋Š” ์ด๋Ÿฐ์ด๋Ÿฐ ์ข…๋ฅ˜๊ฐ€ ์žˆ๊ตฌ๋‚˜ ์ด๋ฆ„ ์ •๋„๋งŒ ์•Œ์•„๋‘๊ณ  ์ถ”ํ›„ ํ•„์š”ํ•ด์ง€๋ฉด ์ถ”๊ฐ€์ ์œผ๋กœ ์ •๋ฆฌํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. ํ˜น์‹œ ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด ํ•„์š”ํ•˜์‹œ๋ฉด ์•„๋ž˜ ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒ€์ƒ‰ํ•˜์‹œ๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค!

  • Serial GC
  • Parallel GC
  • Parallel Old GC(Parallel Compacting GC)
  • Concurrent Mark & Sweep GC(์ดํ•˜ CMS)
  • G1(Garbage First) GC

4.๐Ÿ’จ๋‚˜๊ฐ€๋ฉฐ

 ์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์ž๋ฐ”์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ํ•ด์ฃผ๋Š” JVM์˜ GC์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋Š” ์ƒ๋‹นํžˆ ๊ท€์ฐฎ์„ ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์ธ๋ฐ ์ด๋ฅผ ๋ฌด์‹ฌ์ฝ” ์“ฐ์ง€ ๋ง๊ณ  ์ž๋ฐ”์˜ ๋…ธ๊ณ ๋ฅผ ์•Œ์•„์ค˜์•ผ๊ฒ ์Šต๋‹ˆ๋‹ค,,

 

 ๋˜ํ•œ ๋‚ด์šฉ์„ ์ฐพ์•„๋ณผ์ˆ˜๋ก GC๋Š” ์‹ฌ์˜คํ•˜๊ณ  ์–ด๋ ค์šด ๋‚ด์šฉ์ธ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์šฐ์„ ์€ ์ •๋ฆฌํ•œ ๋‚ด์šฉ์„ ๋จธ๋ฆฟ์†์— ์ž˜ ๋‹ด์•„๋‘๊ณ  ์ถ”ํ›„ ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ๋Š” ๊ธฐํšŒ๊ฐ€ ๋˜๋ฉด ๊ด€๋ จ ๊ธ€์„ ๋” ์ž‘์„ฑํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.


Reference

๋„ค์ด๋ฒ„ D2 Java Garbage Collection

๋„ค์ด๋ฒ„ D2 Java Reference์™€ GC

Oracle Java Garbage Collection Basics

 

 

 

 

 

๋ณต์‚ฌํ–ˆ์Šต๋‹ˆ๋‹ค!