GC ์•Œ์•„๋ณด๊ธฐ

https://www.youtube.com/watch?v=FMUpVA0Vvjw&list=LL&index=73&t=12sarrow-up-right

์šฐ์•„ํ•œ ํ…Œํฌ์ฝ”์Šค ์กฐ์—˜๋‹˜์˜ ์˜์ƒ์„ ๋ณด๊ณ  ์ •๋ฆฌํ•œ ๋‚ด์šฉ์ด๋‹ค.

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Garbage Collection, GC)

GC๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜์ด๋‹ค. JVM์˜ ํž™ ์˜์—ญ์—์„œ ๋™์ ์œผ๋กœ ํ• ๋‹นํ–ˆ๋˜ ๋ฉ”๋ชจ๋ฆฌ ์ค‘ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋“ค์„ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ชจ์•„ ์ œ๊ฑฐํ•˜๋Š” ํ”„๋กœ์„ธ์Šค์ด๋‹ค.

๋™์ ์œผ๋กœ ํ• ๋‹นํ–ˆ๋˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์€ ๋Ÿฐํƒ€์ž„์— ์‚ฌ์šฉ๋˜๋Š” Heap ์˜์—ญ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

GC๊ฐ€ ํž™ ์˜์—ญ์˜ ๊ฐ์ฒด๋“ค ์ค‘์—์„œ ๋” ์ด์ƒ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋“ค์„ ์ฐพ์•„๋‚ด์–ด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œํ•จ์œผ๋กœ์จ, ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์•ˆ์ •์„ฑ์„ ๋†’์ธ๋‹ค.

C, C++์—์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ํ•ด์ œํ•˜๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ์ˆ˜๋™์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” ๊ฒƒ์€ ๋ฒˆ๊ฑฐ๋กญ๋‹ค.

ํ• ๋‹น๋ฐ›์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜์ง€ ์•Š์•„ โ€œMemory Leakโ€์ด ๋ฐœ์ƒํ•˜๊ธฐ๋„ ํ•œ๋‹ค.

Java์™€ JS ๊ฐ™์€ ์–ธ์–ด์—์„œ๋Š” GC๊ฐ€ ์•Œ์•„์„œ ํ•ด์ค€๋‹ค.

์žฅ์  :

  • ๊ฐœ๋ฐœ์ž์˜ ์‹ค์ˆ˜๋กœ ์ธํ•œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.

  • ํ•ด์ œ๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋˜ ํ•ด์ œํ•˜๋Š” ์ด์ค‘ ํ•ด์ œ๋ฅผ ๋ง‰์„ ์ˆ˜ ์žˆ๋‹ค.

๋‹จ์  :

  • ์–ด๋–ค ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด ํ•ด์ œ์˜ ๋Œ€์ƒ์ด ๋ ์ง€ ๊ฒ€์‚ฌํ•˜๊ณ  ํ•ด์ œํ•˜๋Š” ์ผ์€ ์˜ค๋ฒ„ํ—ค๋“œ์ด๋‹ค.

    • GC ์ž‘์—…์€ ์ˆœ์ˆ˜ ์˜ค๋ฒ„ํ—ค๋“œ

  • GC์˜ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ๊ฐ€ ์–ธ์ œ ๋ฐœ์ƒํ•˜๋Š”์ง€ ๊ฐœ๋ฐœ์ž๊ฐ€ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

GC ์•Œ๊ณ ๋ฆฌ์ฆ˜

GC๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์ œํ•  ๋™์  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์•Œ์•„์„œ ํŒ๋‹จํ•  ์ˆ˜ ์žˆ์„๊นŒ? ๐Ÿค”

Root space

root space๋Š” ์Šคํƒ ๋ณ€์ˆ˜, ์ „์—ญ ๋ณ€์ˆ˜ ๋“ฑ, Heap ์˜์—ญ์„ ์ฐธ์กฐํ•˜๋Š” ๋ณ€์ˆ˜๋ฅผ ๋‹ด์€ ๋ณ€์ˆ˜์ด๋‹ค.

1. Reference Counting

Reference Counting์€ Heap ์˜์—ญ์— ์„ ์–ธ๋œ ๊ฐ์ฒด๋“ค์ด ๊ฐ๊ฐ reference count๋ผ๋Š” ๋ณ„๋„์˜ ์ˆซ์ž๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

  • reference count๋Š” ๋ช‡ ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๋‹น ๊ฐ์ฒด์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

  • ์ฆ‰, count๊ฐ€ 0์ด ๋œ๋‹ค๋ฉด GC์˜ ๋Œ€์ƒ์ด ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

Reference Counting์€ ์ˆœํ™˜ ์ฐธ์กฐ๋ผ๋Š” ๋ฌธ์ œ์ ์ด ์žˆ๋‹ค.

Root Space์—์„œ Heap space์˜ ์ ‘๊ทผ์„ ๋ชจ๋‘ ๋Š์–ด๋ฒ„๋ฆฌ๋ฉด, ๋…ธ๋ž€์ƒ‰ ๊ณ ๋ฆฌ ์•ˆ์˜ ๊ฐ์ฒด๋“ค์€ ์„œ๋กœ๊ฐ€ ์„œ๋กœ๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Reference Count๊ฐ€ 1๋กœ ์œ ์ง€ ๋  ๊ฒƒ์ด๋‹ค.

๋”ฐ๋ผ์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด ํ•ด์ œ๋˜์ง€ ๋ชปํ•˜๊ณ  Memory Leak์ด ๋ฐœ์ƒํ•œ๋‹ค.

2. Mark And Sweep

Mark and sweep์€ Reference Counting์˜ ์ˆœํ™˜ ์ฐธ์กฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

root์—์„œ ๋ถ€ํ„ฐ ํ•ด๋‹น ๊ฐ์ฒด์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ์ง€๋ฅผ ํ•ด์ œ์˜ ๊ธฐ์ค€์œผ๋กœ ์‚ผ๋Š”๋‹ค.

root๋ถ€ํ„ฐ ๊ทธ๋ž˜ํ”„ ์ˆœํšŒ๋ฅผ ํ†ตํ•ด์„œ ์—ฐ๊ฒฐ๋œ ๊ฐ์ฒด๋“ค์„ ์ฐพ์•„๋‚ด๊ณ  (Mark)

์—ฐ๊ฒฐ์ด ๋Š์–ด์ง„ ๊ฐ์ฒด๋“ค์€ GC์˜ ๋Œ€์ƒ์ด๋‹ค. (Sweep)

root๋กœ๋ถ€ํ„ฐ ์—ฐ๊ฒฐ๋œ ๊ฐ์ฒด๋Š” Reachable, ์—ฐ๊ฒฐ๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด UnReachable ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

  • sweep ์ดํ›„ ๋ถ„์‚ฐ๋œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ •๋ฆฌ๋˜๋Š”๋ฐ, ์ด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ ํŒŒํŽธํ™”๋ฅผ ๋ง‰๋Š” Compaction ์ด๋ผ๊ณ  ํ•œ๋‹ค.

  • Mark and sweep์—์„œ Compaction์€ ํ•„์ˆ˜ ๊ณผ์ •์€ ์•„๋‹ˆ๋‹ค.

Mark and sweep์„ ์‚ฌ์šฉํ•˜๋ฉด ์ˆœํ™˜ ์ฐธ์กฐ๋˜๋Š” ๊ฐ์ฒด๋“ค๋„ ๋ชจ๋‘ ์ง€์šธ ์ˆ˜ ์žˆ๋‹ค.

Java์™€ JS๊ฐ€ ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.

๋‹จ์  :

  • reference count์™€ ๋‹ฌ๋ฆฌ ์˜๋„์ ์œผ๋กœ GC๋ฅผ ์‹คํ–‰์‹œ์ผœ์•ผ ํ•œ๋‹ค.

    • ์–ด๋А ์‹œ์ ์— ์‹คํ–‰์ค‘์ธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด GC์—๊ฒŒ ์ปดํ“จํ„ฐ ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค.

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ GC ์‹คํ–‰์ด ๋ณ‘ํ–‰๋œ๋‹ค.

    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‚ฌ์šฉ์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ ํšจ์œจ์ ์œผ๋กœ GC๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ค์šด ์ตœ์ ํ™” ์ž‘์—…์ด๋‹ค.

JVM์˜ ๊ตฌ์กฐ (Java 8 ๊ธฐ์ค€)

JVM์€ ํฌ๊ฒŒ 3๊ฐ€์ง€ ์˜์—ญ์œผ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

  1. Class Loader

    • ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ , ํด๋ž˜์Šค ์ •๋ณด๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์˜ Heap/Method ์˜์—ญ์— ์ €์žฅํ•˜๋Š” ํด๋ž˜์Šค ๋กœ๋”

  2. JVM Memory

    • ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์˜ ์ •๋ณด๊ฐ€ ์˜ฌ๋ผ๊ฐ€ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ

  3. Execution Engine

    • byte code๋ฅผ native code๋กœ ๋ณ€ํ™˜ํ•˜๊ณ  GC๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์‹คํ–‰ ์—”์ง„

JVM Memory๋Š” OS๋กœ๋ถ€ํ„ฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น ๋ฐ›์€ ํ›„, ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์šฉ๋„์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„์–ด์„œ ๊ด€๋ฆฌํ•œ๋‹ค.

์ด 5๊ฐ€์ง€ ์˜์—ญ์œผ๋กœ ๋‚˜๋‰˜๊ณ  ํฌ๊ฒŒ 2๊ฐ€์ง€๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ๊ณต์œ ํ•˜๋Š” ์˜์—ญ : Method, Heap Area

  • ๊ฐ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ๊ณ ์œ ํ•˜๊ฒŒ ์ƒ์„ฑ ํ•˜๋Š” ์˜์—ญ

    • Stack : ์Šค๋ ˆ๋“œ ์ข…๋ฃŒ ์‹œ ์†Œ๋ฉธ

    • PC Register, Native Method Stack

  1. Method Area

  • ๋ฉ”ํƒ€ ๋ฐ์ดํ„ฐ์ฒ˜๋Ÿผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ๋ฉ”์„œ๋“œ์˜ ์ฝ”๋“œ๋ฅผ ์ €์žฅํ•œ๋‹ค.

  1. Heap

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰ ์ค‘ ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด ์ธ์Šคํ„ด์Šค๋ฅผ ์ €์žฅํ•œ๋‹ค.

  • GC์— ์˜ํ•ด ๊ด€๋ฆฌ๋˜๋Š” ์˜์—ญ

  1. Stack

  • ๋ฉ”์„œ๋“œ ํ˜ธ์ถœ์„ ์Šคํƒ ํ”„๋ ˆ์ž„์ด๋ผ๋Š” ๋ธ”๋ก์œผ๋กœ ์Œ“์œผ๋ฉฐ ๋กœ์ปฌ ๋ณ€์ˆ˜, ์ค‘๊ฐ„ ์—ฐ์‚ฐ ๊ฒฐ๊ณผ๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ

  1. PC Register

  • ์“ฐ๋ ˆ๋“œ๊ฐ€ ํ˜„์žฌ ์‹คํ–‰ํ•  ์Šคํƒ ํ”„๋ ˆ์ž„์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•œ๋‹ค.

  1. Native Method Stack

  • C/C++ ๋“ฑ์˜ Low level ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” Stack ์ด๋‹ค.

Root Space

JVM์˜ GC๋Š” ๊ธฐ๋ณธ์œผ๋กœ Mark and sweep ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š”๋ฐ, root์—์„œ ๋ถ€ํ„ฐ ํ•ด๋‹น ๊ฐ์ฒด์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ์ง€๊ฐ€ ํ•ด์ œ์˜ ๊ธฐ์ค€์ด๋‹ค.

  • JVM์˜ root space๋Š” JVM ๋ฉ”๋ชจ๋ฆฌ์˜ Stack์˜ ๋กœ์ปฌ ๋ณ€์ˆ˜, Method ์˜์—ญ์— ์ €์žฅ๋œ static ๋ณ€์ˆ˜, Native Method Stack์˜ C/C++๋กœ ์ž‘์„ฑ๋œ JNI ์ฐธ์กฐ์ด๋‹ค.

Mark and sweep์˜ ํŠน์ง• ์ค‘ ์˜๋„์ ์œผ๋กœ GC๋ฅผ ์‹คํ–‰์‹œ์ผœ์•ผ ํ•˜๋Š” ํŠน์ง•์ด ์žˆ๋‹ค. ๋”ฐ๋ผ์„œ GC์˜ ์‹คํ–‰ ํƒ€์ด๋ฐ์„ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” Heap ์˜์—ญ์„ ๋” ์•Œ์•„์•ผ ํ•œ๋‹ค.

JVM - Heap

JVM์˜ ํž™ ์˜์—ญ์€ ํฌ๊ฒŒ Young Generation ๊ณผ Old Generation ์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

  • Young ์—์„œ ๋ฐœ์ƒํ•˜๋Š” GC = minor gc

    • minor gc๋Š” Eden / survival 0 / survival 1 ์˜์—ญ์œผ๋กœ ๋‚˜๋‰œ๋‹ค.

  • Old ์—์„œ ๋ฐœ์ƒํ•˜๋Š” Gc = major gc

Eden : ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋“ค์ด ํ• ๋‹น๋˜๋Š” ์˜์—ญ

Survival : minor gc์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์ด ์กด์žฌํ•˜๋Š” ์˜์—ญ

  • Survival 0 ๋˜๋Š” 1 ์ค‘ ํ•˜๋‚˜๋Š” ๋ฐ˜๋“œ์‹œ ๋น„์–ด ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ํŠน์ง•์ด ์žˆ๋‹ค.

Youn Generation & Old Generation ๋ฐœ์ƒ ๊ณผ์ •

  1. ๋ธ”๋ก๋“ค์€ ์ƒˆ๋กœ์šด ๊ฐ์ฒด์ด๊ณ , ์ด๊ฒƒ์ด ๊ณ„์† ์ƒ์„ฑ๋˜๋ฉด Eden ์˜์—ญ์ด ๊ฐ€๋“ ์ฐฐ ๊ฒƒ์ด๋‹ค.

    • ์ด ๋•Œ, minor GC๊ฐ€ ์ผ์–ด๋‚œ๋‹ค. โ†’ Mark & Sweep์ด ์ง„ํ–‰๋œ๋‹ค.

  2. Root๋กœ๋ถ€ํ„ฐ Reachable์ด๋ผ๊ณ  ํŒ๋‹จ๋œ ๊ฐ์ฒด๋“ค์€ Survival 0 ์˜์—ญ์œผ๋กœ ์˜ฎ๊ฒจ์ง€๊ณ , ์˜ฎ๊ฒจ์ง„ ๊ฐ์ฒด์˜ ์ˆซ์ž๊ฐ€ 0 โ†’ 1๋กœ ์ฆ๊ฐ€ํ•œ๋‹ค. ํ•ด๋‹น ์ˆซ์ž๋Š” age-bit๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

    • age-bit : Minor GC์—์„œ ์‚ด์•„๋‚จ์„ ๋•Œ๋งˆ๋‹ค 1์”ฉ ์ฆ๊ฐ€ํ•œ๋‹ค.

  1. ์‹œ๊ฐ„์ด ํ˜๋Ÿฌ์„œ Eden ์˜์—ญ์ด ๋˜ ๊ฐ€๋“์ฐจ๊ณ , Minor GC๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

  • Rechable๋กœ ํŒ๋‹จ๋œ ๊ฐ์ฒด๋“ค์€ Survival 0 โ†’ 1๋กœ ์ด๋™ํ•œ๋‹ค.

  1. ์œ„ ๊ณผ์ •์ด ๊ณ„์† ๋ฐ˜๋ณต๋˜๊ณ , Suvival 0 ์˜์—ญ์œผ๋กœ ๋„˜์–ด์˜จ ๊ฐ์ฒด ์ค‘ ํ•˜๋‚˜์˜ age-bit๊ฐ€ 3์ด ๋˜๋ฉด,

  • JVM GC์—์„œ๋Š” ์ผ์ • ์ˆ˜์ค€์˜ age-bit๋ฅผ ๋„˜์–ด๊ฐ€๋ฉด ์˜ค๋ž˜๋„๋ก ์ฐธ์กฐ ๋  ๊ฐ์ฒด๋ผ๊ณ  ํŒ๋‹จํ•˜์—ฌ ํ•ด๋‹น ๊ฐ์ฒด๋ฅผ Old Generation์— ๋„˜๊ฒจ์ค€๋‹ค. ์ด ๊ณผ์ •์„ ๐Ÿ”ฅ Promotion ๐Ÿ”ฅ ์ด๋ผ๊ณ  ํ•œ๋‹ค.

  1. ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด Old Generation๋„ ๊ฐ€๋“ ์ฑ„์›Œ์งˆํ…๋ฐ, ์ด๋•Œ Major GC๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด์„œ ํ•„์š”์—†๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋น„์›Œ์ค€๋‹ค. Major GC๋Š” Minor GC๋ณด๋‹ค ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ Old Generation์€ Young Generation๋ณด๋‹ค ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰์„ ํฌ๊ฒŒ ์žก๋Š”๋‹ค.

๋””ํดํŠธ ๊ฐ’์ด Young Gen:Old Gen์ด 1:3์ด๋‹ค. ๋”ฐ๋ผ์„œ Old Generation์— ๊ฐ์ฒด์˜ ๊ฐฏ์ˆ˜๊ฐ€ ๋งŽ๊ธฐ ๋•Œ๋ฌธ์— GC ์‹œ๊ฐ„์ด ๊ธธ๋‹ค. GC์˜ ์‹œ๊ฐ„์ด ๊ธธ๋‹ค๋Š” ๊ฒƒ์€ STW๊ฐ€ ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค๋Š” ์†Œ๋ฆฌ์ด๋‹ค. ๋˜ํ•œ, Old Generation์€ ๋ณ„๋„์˜ Survivor Space๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ๋‹จํŽธํ™”๋„ ์‹ ๊ฒฝ์จ์•ผ ํ•œ๋‹ค.

๐Ÿค” ๊ทธ๋Ÿผ ์™œ young๊ณผ old๋กœ ๋‚˜๋ˆ ๋†จ์„๊นŒ?

GC ์„ค๊ณ„์ž๋“ค์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ถ„์„ํ•ด๋ณด๋‹ˆ ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด ์ˆ˜๋ช…์ด ์งง๋‹ค๋Š” ๊ฒƒ์„ ๊นจ๋‹ฌ์•˜๋‹ค.

๋”ฐ๋ผ์„œ ์ตœ๋Œ€ํ•œ Young Genration ์•ˆ์—์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

  • Minor GC๊ฐ€ Major GC๋ณด๋‹ค GC ์‹œ๊ฐ„์ด ๋น ๋ฅด๋‹ค.

GC ๊ฐ„๋‹จ ์š”์•ฝ(Minor, Major, Full)

Minor GC

  • Young Generation์˜ Eden ์˜์—ญ์ด ๊ฐ€๋“ ์ฐจ๋ฉด Minor GC๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ , ์‚ด์•„์žˆ๋Š” ๊ฐ์ฒด๋“ค์€ Survivor ์˜์—ญ์œผ๋กœ ๋ณต์‚ฌํ•œ๋‹ค. ์ด ๊ณผ์ •์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋Š” ์ œ๊ฑฐ๋œ๋‹ค.

  • Minor GC๋Š” ๋น„๊ต์  ๋น ๋ฅด๊ฒŒ ์ˆ˜ํ–‰๋˜์ง€๋งŒ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๋ฅผ ๋ฉˆ์ถ”๊ฒŒ ํ•˜๋Š” STW ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. (์ด ์ค‘๋‹จ ์‹œ๊ฐ„๋„ ์ผ๋ฐ˜์ ์œผ๋กœ ์งง๋‹ค.)

Major GC

  • Old Generation์€ Young์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์ด ์ด๋™ํ•˜๋Š” ์˜์—ญ์ด๋‹ค. (์ƒ๋Œ€์ ์œผ๋กœ ์ˆ˜๋ช…์ด ๊ธด ๊ฐ์ฒด๋“ค)

  • Old Generation์ด ๊ฝ‰ ์ฐจ๋ฉด Major GC๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  STW ์ด๋ฒคํŠธ๋ฅผ ์œ ๋ฐœํ•œ๋‹ค.

  • Tenured ๊ณต๊ฐ„์„ ์ฒญ์†Œํ•œ๋‹ค.

    • Tenured๋Š” JVM์˜ ํž™ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์—์„œ Old Generation์„ ์˜๋ฏธํ•œ๋‹ค.

Full GC

  • Young, Tenured(์ „์ฒด ํž™) ๊ณต๊ฐ„์˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋“ค์„ ๋ชจ๋‘ ์ •๋ฆฌํ•œ๋‹ค.

  • ์Šค๋ ˆ๋“œ ์ค‘๋‹จ ์‹œ๊ฐ„์ด ๋งค์šฐ ๊ธธ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์„ฑ๋Šฅ์— ํฐ ์˜ํ–ฅ์„ ์ค„ ์ˆ˜ ์žˆ๋‹ค.

JVM GC ๋ฐฉ์‹

Serial GC

ํ•˜๋‚˜์˜ ์“ฐ๋ ˆ๋“œ๋กœ GC ์‹คํ–‰ํ•œ๋‹ค. ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋งŒ ์‚ฌ์šฉํ•˜๋‹ค๋ณด๋‹ˆ Stop The World ์‹œ๊ฐ„์ด ๊ธธ๋‹ค.

  • ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์ด๋‚˜ Heap์ด ๋งค์šฐ์ž‘์„ ๋•Œ ์‚ฌ์šฉ

Parallel GC

์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋กœ GC๋ฅผ ์‹คํ–‰ํ•œ๋‹ค. ๋ฉ€ํ‹ฐ์ฝ”์–ด ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๋ฉฐ Java 8์˜ ๊ธฐ๋ณธ GC ๋ฐฉ์‹์ด๋‹ค.

CMS GC (Concurrent Mark Sweep)

STW ์ตœ์†Œํ™”๋ฅผ ์œ„ํ•ด ๊ณ ์•ˆ๋œ ๋ฐฉ์‹์ด๋‹ค. GC ์ž‘์—…์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊ณผ ๋™์‹œ์— ์‹คํ–‰ํ•œ๋‹ค.

  • ๋Œ€๋ถ€๋ถ„ GC ์ž‘์—…์„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์Šค๋ ˆ๋“œ์™€ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•˜์—ฌ STW๋ฅผ ์ตœ์†Œํ™” ์‹œํ‚ด

  • ๋ฉ”๋ชจ๋ฆฌ์™€ CPU๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ , Mark Sweep ๊ณผ์ • ์ดํ›„ ๋ฉ”๋ชจ๋ฆฌ ํŒŒํŽธํ™”๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” Compaction์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ œ๊ณต๋˜์ง€ ์•Š๋Š”๋‹ค.

  • G1 GC์— ๋Œ€์ฒด๋˜์—ˆ์Œ

G1 GC (Garbage First)

G1 GC๋Š” Heap ์˜์—ญ์„ ์œ„ ๋ฐฉ์‹๋“ค๊ณผ ์กฐ๊ธˆ ๋‹ค๋ฅด๊ฒŒ ์‚ฌ์šฉํ•œ๋‹ค.

Heap์„ ์ผ์ • ํฌ๊ธฐ์˜ Region์œผ๋กœ ์ž˜๊ฒŒ ๋‚˜๋ˆ„์–ด ์–ด๋–ค ์˜์—ญ์€ Young Generation, ์–ด๋–ค ์˜์—ญ์€ Old Generation์œผ๋กœ ํ™œ์šฉํ•œ๋‹ค. ๋Ÿฐํƒ€์ž„์— G1 GC๊ฐ€ ์˜์—ญ๋ณ„ Region ๊ฐœ์ˆ˜๋ฅผ ํŠœ๋‹ํ•œ๋‹ค.

  • Java 9 ์ด์ƒ ๋ถ€ํ„ฐ๋Š” G1 GC๋ฅผ ๊ธฐ๋ณธ GC ์‹คํ–‰๋ฐฉ์‹์œผ๋กœ ํ•œ๋‹ค.

GC ํŠœ๋‹ ๋ชฉํ‘œ

  1. Old Generation์œผ๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ฐ์ฒด๋ฅผ ์ตœ์†Œํ™”

  2. Major GC ์‹œ๊ฐ„์„ ์งง๊ฒŒ ์œ ์ง€

Major GC๋ฅผ ์ ๊ฒŒ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ๋น ๋ฅธ ์‹œ๊ฐ„๋‚ด์— ๋๋‚ด๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ด๋‹ค.

ํ•œ์ •๋œ Heap ์˜์—ญ์— YG, OG๋ฅผ ๊ฐ๊ฐ ์–ผ๋งˆ๋งŒํผ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ด ์ ๋‹นํ•œ์ง€๋ฅผ ํŒ๋‹จํ•ด์•ผ ํ•œ๋‹ค.

Last updated