๐Ÿ—‘๏ธ ์ž๋ฐ”์˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ํ•œ๋ˆˆ์— ๋ณด๊ธฐ

๋„๋‘๋งจยท2025๋…„ 6์›” 11์ผ

๊ณต๋ถ€

๋ชฉ๋ก ๋ณด๊ธฐ
15/23

์—˜๋ฆฌ์˜ GC ์˜์ƒ์„ ๋ณด๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค.
JVM์—์„œ GC๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด, ์„ฑ๋Šฅ ํŠœ๋‹๊ณผ ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ ๊ด€๋ฆฌ์— ํฐ ๋„์›€์ด ๋ฉ๋‹ˆ๋‹ค.


๐Ÿ“Œ GC(Garbage Collection)์ด๋ž€?

JVM์˜ Heap ์˜์—ญ์—์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ์ž๋™์œผ๋กœ ์‚ญ์ œํ•˜๋Š” ํ”„๋กœ์„ธ์Šค

  • Heap์—๋Š” String, List, ์ปค์Šคํ…€ ํด๋ž˜์Šค ๋“ฑ ์˜ค๋ธŒ์ ํŠธ ํƒ€์ž… ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋จ
  • ์–ด๋–ค ๊ฐ์ฒด๊ฐ€ ์‚ญ์ œ ๋Œ€์ƒ์ธ์ง€ ์–ด๋–ป๊ฒŒ ๊ตฌ๋ถ„ํ• ๊นŒ?

๐Ÿ” GC์˜ ์ˆ˜๊ฑฐ ๋Œ€์ƒ: Reachability

  • GC๋Š” GC Root์—์„œ๋ถ€ํ„ฐ ์ฐธ์กฐ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋“ค๋งŒ ๋‚จ๊ธฐ๊ณ  ๋‚˜๋จธ์ง€๋ฅผ ์‚ญ์ œ
  • ์ฐธ์กฐ๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋Š” unreachable ํ•˜๋‹ค๊ณ  ํŒ๋‹จ โ†’ GC ๋Œ€์ƒ

GC Root๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ์กฐ๊ฑด

  • Stack ์˜์—ญ์˜ ์ง€์—ญ ๋ณ€์ˆ˜
  • Method ์˜์—ญ์˜ static ๋ณ€์ˆ˜
  • JNI๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด ๋“ฑ


โš™๏ธ GC์˜ ๋™์ž‘ ๋ฐฉ์‹

Mark and Sweep ์•Œ๊ณ ๋ฆฌ์ฆ˜

๋‹จ๊ณ„์„ค๋ช…
MarkGC Root๋ถ€ํ„ฐ ๊ฐ์ฒด๋ฅผ ํƒ์ƒ‰ํ•˜๋ฉฐ ์ฐธ์กฐ๋œ ๊ฐ์ฒด์— ๋งˆํ‚น
Sweep๋งˆํ‚น๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐ
Compact๋‹จํŽธํ™” ๋ฐฉ์ง€๋ฅผ ์œ„ํ•ด ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋ฅผ ํ•œ ๊ณณ์œผ๋กœ ์ด๋™ (์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋”ฐ๋ผ ์˜ต์…˜)

๐Ÿง  JVM Heap ๊ตฌ์กฐ์™€ GC ๋ฐœ์ƒ ์‹œ์ 

์˜์—ญ์„ค๋ช…
Young Generation์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋จ (Eden, Survivor)
Old Generation์˜ค๋ž˜ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์ด ์ €์žฅ๋จ
Metaspaceํด๋ž˜์Šค ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ (Java 8๋ถ€ํ„ฐ PermGen โ†’ Metaspace๋กœ ๋Œ€์ฒด๋จ)

๐Ÿงช Minor GC์™€ ๊ฐ์ฒด ์ƒ์กด

Eden โ†’ Survivor โ†’ Old๋กœ ๊ฐ์ฒด ์ด๋™

  • Eden์ด ๊ฐ€๋“ ์ฐจ๋ฉด Minor GC ๋ฐœ์ƒ
  • Survivor0 โ†” Survivor1์€ ๋ฒˆ๊ฐˆ์•„ ์‚ฌ์šฉ (ํ•œ์ชฝ์€ ํ•ญ์ƒ ๋น„์›Œ๋‘ฌ์•ผ ํ•จ)

  • ๊ฐ์ฒด์˜ ์ƒ์กด ํšŸ์ˆ˜(Age)๊ฐ€ ๊ธฐ์ค€์น˜๋ฅผ ๋„˜์œผ๋ฉด Old Generation์œผ๋กœ ์ด๋™

๐Ÿ”ฅ Major GC

  • Old Generation์ด ๊ฐ€๋“ ์ฐผ์„ ๋•Œ ๋ฐœ์ƒ
  • Minor GC๋ณด๋‹ค ๋น„์šฉ์ด ํฌ๊ณ  ์‹œ๊ฐ„๋„ ์˜ค๋ž˜ ๊ฑธ๋ฆผ
  • Major GC๋Š” ์ตœ์†Œํ™”ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Œ

๐Ÿ’ก GC๊ฐ€ ์ „์ œํ•˜๋Š” ๊ฐ€์„ค (Weak Generational Hypothesis)

  1. ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๋Š” ๊ธˆ๋ฐฉ Unreachable ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.
  2. ์˜ค๋ž˜๋œ ๊ฐ์ฒด์—์„œ ์ Š์€ ๊ฐ์ฒด๋กœ์˜ ์ฐธ์กฐ๋Š” ๋งค์šฐ ์ ๋‹ค.

  • ํŒŒ๋ž€์ƒ‰: ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋Š” ๊ฐ์ฒด๋“ค
  • Minor collections: Minor GC์ด๋ผ ์ƒ๊ฐํ•ด๋ฉด ์ดํ•ดํ•˜๊ธฐ ํŽธํ•˜๋‹ค
  • Minor GC๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ๊ฝค ๋งŽ์€ ๊ฐ์ฒด๋“ค์ด ์ˆ˜๊ฑฐ๋˜๋Š” ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ์Œ -> ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋ฅผ ๋ง‰์Œ
  • ๋ฐ˜๋ฉด major gc๋Š” ํ•œ ๋ฒˆ ์ผ์–ด๋‚˜๋„ ์ˆ˜๊ฑฐ๋˜๋Š” ๊ฐ์ฒด๊ฐ€ ๋ณ„๋กœ ์—†๋‹ค.

GC๋Š” young ์˜์—ญ์—์„œ ๋” ์ž์ฃผ GC๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, old ์˜์—ญ์€ ๋œ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ˆ˜ํ–‰


๐Ÿงจ Stop-The-World๋ž€?

GC ์ˆ˜ํ–‰ ์‹œ JVM์ด ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์Šค๋ ˆ๋“œ๋ฅผ ๋ฉˆ์ถ”๊ณ  GC ์ „์šฉ ์Šค๋ ˆ๋“œ๋งŒ ๋™์ž‘ํ•˜๋Š” ์ƒํƒœ

  • GC ์ข…๋ฅ˜์— ๋”ฐ๋ผ STW ์‹œ๊ฐ„์ด ๋‹ค๋ฆ„
  • ์„ฑ๋Šฅ ๋ณ‘๋ชฉ์˜ ์›์ธ์ด ๋  ์ˆ˜ ์žˆ์Œ โ†’ GC ์ข…๋ฅ˜ ์„ ํƒ์ด ์ค‘์š”ํ•จ

๐Ÿงฌ GC ์ข…๋ฅ˜ ์ •๋ฆฌ

Serial GC

  • ๊ฐ€์žฅ ๋‹จ์ˆœํ•˜๊ณ  ๊ธฐ๋ณธ์ ์ธ GC
  • ๋‹จ์ผ ์Šค๋ ˆ๋“œ๋กœ ์ˆ˜ํ–‰
  • ๋‹ค๋ฅธ GC๋“ค์— ๋น„ํ•ด STW ์‹œ๊ฐ„์ด ๊น€

Parallel GC

  • java 8์˜ ๊ธฐ๋ณธ GC
  • Young GC๋ฅผ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋กœ ์ฒ˜๋ฆฌ

Parallel Old GC

  • Parallel GC์˜ ๊ฐœ์„  ๋ฒ„์ „
  • Old ์˜์—ญ์—์„œ๋„ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋กœ ์ฒ˜๋ฆฌ
  • Mark-Summary-Compact ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ
    Sweep: ๋‹จ์ผ ์Šค๋ ˆ๋“œ๊ฐ€ Old ์˜์—ญ์„ ํ›‘๋Š”๋‹ค.
    Summary: ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๊ฐ€ Old ์˜์—ญ์„ ๋ถ„๋ฆฌํ•ด์„œ ํ›‘๋Š”๋‹ค.

CMS GC

  • STW ์‹œ๊ฐ„์„ ์ค„์ด๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋จ
  • Reachableํ•œ ๊ฐ์ฒด๋“ค์„ ํ•œ๋ฒˆ์— ์ฐพ์ง€ ์•Š๊ณ  ์ˆœ์ฐจ์ ์œผ๋กœ ์ฐพ์Œ
  • ๋‹จ์ผ ์Šค๋ ˆ๋“œ๋กœ GC๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€๋งŒ ๋‚˜๋จธ์ง€ ์Šค๋ ˆ๋“œ๋“ค์€ ์ž‘์—…์„ ๊ณ„์† ์ง„ํ–‰ํ•จ
  • Compact ์—†์Œ (๋‹จํŽธํ™” ๋ฌธ์ œ ์žˆ์Œ)

G1 GC (Garbage First)

  • CMS GC๋ฅผ ๊ฐœ์„ 
  • Java 9+์˜ ๊ธฐ๋ณธ GC
  • Region ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘
  • Compact ๊ฐ€๋Šฅ

๐Ÿง  ๋งˆ๋ฌด๋ฆฌ

GC๋Š” JVM์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋„๋ก ๋•๋Š” ์ค‘์š”ํ•œ ๊ธฐ๋Šฅ์ด๋‹ค.

  • GC๊ฐ€ ์–ธ์ œ, ์–ด๋–ค ์˜์—ญ์—์„œ, ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€๋ฅผ ์ดํ•ดํ•˜๋ฉด
  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ฑ๋Šฅ ํŠœ๋‹๊ณผ ์žฅ์•  ๋ถ„์„์— ํฐ ๋„์›€์ด ๋œ๋‹ค

๐ŸŽฅ ์ฐธ๊ณ  ์ž๋ฃŒ

๐Ÿฅ์—˜๋ฆฌ์˜ GC

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