1%/IT์ƒ์‹

JVM์ด GC(Gavage Collection)์„ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšŒ์ˆ˜ํ•˜๋Š” ๋ฐฉ๋ฒ•

Boris 2025. 3. 24. 23:24

๐Ÿ”น GC๋ฅผ ํ†ตํ•ด JVM์ด ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๋ถ„์„ํ•˜์—ฌ ๋” ์ด์ƒ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ์ž๋™์œผ๋กœ ์ •๋ฆฌํ•˜๋Š” ๋ฐฉ์‹

 

[ JVM ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ ]

1. Heap ์˜์—ญ

  • GC๊ฐ€ ์ฃผ๋กœ ์ˆ˜ํ–‰๋˜๋Š” ์˜์—ญ
  • ๊ฐ์ฒด์™€ ์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋จ
  • Young/Old Generation์œผ๋กœ ๋‚˜๋‰จ

2. Stack ์˜์—ญ

  • GC์˜ ๋Œ€์ƒ์ด ์•„๋‹˜ (๋ฉ”์„œ๋“œ ์‹คํ–‰์ด ๋๋‚˜๋ฉด ์ž๋™ ์ •๋ฆฌ)
  • ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์‹œ ์ƒ์„ฑ๋˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜ ๋ฐ ์Šค๋ ˆ๋“œ๋ณ„ ์‹คํ–‰ ์ปจํ…์ŠคํŠธ ์ €์žฅ

3. Method(๋ฉ”ํƒ€๋ฐ์ดํ„ฐ) ์˜์—ญ

  • ํด๋ž˜์Šค์˜ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ, ์ •์  ๋ณ€์ˆ˜, ๋Ÿฐํƒ€์ž„ ์ƒ์ˆ˜ ํ’€์ด ์ €์žฅ๋จ
  • Java 8๋ถ€ํ„ฐ๋Š” Metaspace๋กœ ๋ณ€๊ฒฝ๋จ

 

[ Heap์˜ ์„ธ๋Œ€ ๊ตฌ์กฐ ]

๐Ÿ”น JVM์˜ GC๋Š” ๊ฐ์ฒด์˜ ์ƒ์กด ๊ธฐ๊ฐ„์— ๋”ฐ๋ผ Young/Old Generation์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

 

1. Young Generation (Eden + Survivor S0, S1) 

  • ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋จ
  • ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๋Š” ์งง์€ ์ˆ˜๋ช…์„ ๊ฐ€์ง„๋‹ค.
  • Minor GC ๋ฐœ์ƒ ์‹œ ๋ถˆํ•„์š”ํ•œ ๊ฐ์ฒด๊ฐ€ ์ •๋ฆฌ ๋จ
  • ์ผ์ • ๊ธฐ์ค€์„ ๋„˜๊ธด ๊ฐ์ฒด๋Š” old Generation์œผ๋กœ ์ด๋™

2. Old Generation (Tenured) 

  • Young Generation์„ ์ง€๋‚˜์˜จ ์˜ค๋ž˜๋œ ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋œ๋‹ค.
  • Major GC (Full GC) ๋ฐœ์ƒ ์‹œ ์ •๋ฆฌ๋œ๋‹ค.

[GC์˜ ์ฃผ์š” ์•Œ๊ณ ๋ฆฌ์ฆ˜]

1. Minor GC (Young Generation GC)

  • Eden์˜์—ญ์ด ๊ฐ€๋“ ์ฐจ๋ฉด ๋ฐœ์ƒ
  • ์ฐธ์กฐ๋˜๋Š” ๊ฐ์ฒด๋Š” Survivor์˜์—ญ์œผ๋กœ ์ด๋™, ๋‚˜๋จธ์ง€๋Š” ์‚ญ์ œ
  • ์ผ์ • ํšŸ์ˆ˜(Threshold)๋ฅผ ๋„˜๊ธฐ๋ฉด Old Generation์œผ๋กœ ์ด๋™

2. Major GC (Old Generation GC, Full GC)

  • Old Generation์˜ ๊ฐ์ฒด๊ฐ€ ๋งŽ์•„์งˆ ๋•Œ ๋ฐœ์ƒ
  • ์ „์ฒด Heap์„ ๋Œ€์ƒ์œผ๋กœ ์ •๋ฆฌํ•˜๋ฏ€๋กœ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ค€๋‹ค.
  • GC๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋ฉˆ์ถ”๋Š” Stop-The-World(STW)๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

[GC ์ข…๋ฅ˜]

  1. Serial GC : ๋‹จ์ผ ์Šค๋ ˆ๋“œ, ์ž‘์€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ์ ํ•ฉ
  2. Parallel GC : ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ณ‘๋ ฌ GC ์ˆ˜ํ–‰ 
  3. CMS GC (Concurrent Mark-Swwep GC) : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ค‘๋‹จ ์ตœ์†Œํ™”
  4. G1 GC (Garbage First GC) : Java9 ๊ธฐ๋ณธ GC, ์„ฑ๋Šฅ ์ตœ์ ํ™”
  5. ZGC & Shenandoah GC : Java11 ์ดํ›„ ๋„์ž…, ์งง์€ ์ง€์—ฐ์‹œ๊ฐ„

* JConsole์„ ํ™œ์šฉํ•˜์—ฌ GC๋ฅผ ๋ˆˆ์œผ๋กœ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. (perform GC)