๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ’Ž/Java

[Java] ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Garbage Collection)

by dar0m! 2021. 8. 11.

C/C++ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(Memory Leak)๋ฅผ ๋ง‰๊ธฐ ์œ„ํ•ด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ ํ›„ ์‚ฌ์šฉ์žํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์ง์ ‘ ํ•ด์ œ ํ•ด์ฃผ์–ด์•ผ ํ–ˆ์ง€๋งŒ, JAVA์—์„œ๋Š” JVM(Java Virtual Machine)์ด ๊ตฌ์„ฑ๋œ JRE(Java Runtime Environment)๊ฐ€ ์ œ๊ณต๋˜๋ฉฐ, ๊ทธ ๊ตฌ์„ฑ ์š”์†Œ ์ค‘ ํ•˜๋‚˜์ธ Garbage Collection(์ดํ•˜ GC)์ด ์ž๋™์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ํŒŒ๊ดดํ•œ๋‹ค.

GC์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ธฐ ์ „์— 'stop-the-world'๋ผ๋Š” ์šฉ์–ด๋ฅผ ์•Œ์•„์•ผํ•œ๋‹ค. 'stop-the-world'๋ž€, GC๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•ด JVM์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์„ ๋ฉˆ์ถ”๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์–ด๋–ค GC ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋”๋ผ๋„ 'stop-the-world'๋Š” ๋ฐœ์ƒํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ๋Œ€๊ฐœ์˜ ๊ฒฝ์šฐ GC ํŠœ๋‹์€ ์ด 'stop-the-world' ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ๊ฒƒ์ด๋ผ๊ณ  ํ•œ๋‹ค๋‹ค.

GC๋ฅผ ํ•ด๋„ ๋”์ด์ƒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด ์—†๋Š”๋ฐ ๊ณ„์† ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋ ค๊ณ  ํ•˜๋ฉด, OutOfMemoryError๊ฐ€ ๋ฐœ์ƒํ•˜์—ฌ WAS๊ฐ€ ๋‹ค์šด๋  ์ˆ˜๋„ ์žˆ๋‹ค. ํ–‰(Hang) ์ฆ‰, ์„œ๋ฒ„๊ฐ€ ์š”์ฒญ์„ ์ฒ˜๋ฆฌ ๋ชปํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ทœ๋ชจ ์žˆ๋Š” JAVA ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํšจ์œจ์ ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” GC์— ๋Œ€ํ•ด ์ž˜ ์•Œ์•„์•ผํ•œ๋‹ค๊ณ  ํ•œ๋‹ค.

 

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

JVM์€ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด๋ผ๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์€ ์ž๋ฐ” ํ”„๋กœ๊ทธ๋žจ์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ง€์†์ ์œผ๋กœ ์ฐพ์•„๋‚ด์„œ ์ œ๊ฑฐํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

์ž๋ฐ”์—์„œ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ GC๋ผ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ†ตํ•˜์—ฌ ๊ด€๋ฆฌ(automatic memory management)ํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๋กœ์ง์„ ๋งŒ๋“ค ํ•„์š”๊ฐ€ ์—†๊ณ , ์ ˆ๋Œ€๋กœ ๋งŒ๋“ค์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค.

์ž๋ฐ”์—์„œ ์“ฐ๋ ˆ๊ธฐ๋Š” ๊ฐ์ฒด์ด๋‹ค. ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ์œ ํ•˜๊ณ , ํ•„์š”ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ์—์„œ ํ•ด์ œ๋˜์–ด์•ผ ํ•œ๋‹ค. 

์ฝ”๋“œ์—์„œ a๋ผ๋Š” ๊ฐ์ฒด๊ฐ€ ๋งŒ๋“ค์–ด์ ธ ๋ฉ”๋ชจ๋ฆฌ์˜ ํ•œ๋ถ€๋ถ„์„ ์ ์œ ํ•˜๊ฒŒ ๋˜๊ณ , ํŠน์ • ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœํ•œ ํ›„ ์ˆ˜ํ–‰์ด ์™„๋ฃŒ๋˜์–ด ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ๋”์ด์ƒ ํ•„์š”์—†๋Š” ๊ฐ์ฒด, ์“ฐ๋ ˆ๊ธฐ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ด ์“ฐ๋ ˆ๊ธฐ ๊ฐ์ฒด๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ์ž‘์—…์„ GC(Garbage Collection)๋ผ๊ณ  ํ•œ๋‹ค.

  • ์‹œ์Šคํ…œ์—์„œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ถ€๋ถ„์„ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋ผ ๋ถ€๋ฅธ๋‹ค.

JVM์˜ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์ด 5๊ฐ€์ง€ ์˜์—ญ(class, stack, heap, native method, PC)์œผ๋กœ ๋‚˜๋‰˜๋Š”๋ฐ, GC๋Š” ํž™ ๋ฉ”๋ชจ๋ฆฌ๋งŒ ๋‹ค๋ฃฌ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฝ์šฐ์— GC์˜ ๋Œ€์ƒ์ด ๋ฉ๋‹ˆ๋‹ค.

  1. ๊ฐ์ฒด๊ฐ€ NULL์ธ ๊ฒฝ์šฐ (ex. String str = null)
  2. ๋ธ”๋Ÿญ ์‹คํ–‰ ์ข…๋ฃŒ ํ›„, ๋ธ”๋Ÿญ ์•ˆ์—์„œ ์ƒ์„ฑ๋œ ๊ฐ์ฒด
  3. ๋ถ€๋ชจ ๊ฐ์ฒด๊ฐ€ NULL์ธ ๊ฒฝ์šฐ, ํฌํ•จํ•˜๋Š” ์ž์‹ ๊ฐ์ฒด

 

๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ ๊ณผ์ •(3๋‹จ๊ณ„)

์‹คํ–‰์ˆœ์„œ : ์ฐธ์กฐ๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋“ค์„ ํƒ์ƒ‰ ํ›„ ์‚ญ์ œ(Marking) → ์‚ญ์ œ๋œ ๊ฐ์ฒด์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ฐ˜ํ™˜(Normal Deletion) → ํž™ ๋ฉ”๋ชจ๋ฆฌ ์žฌ์‚ฌ์šฉ(Compacting)

1. Marking

  • ํ”„๋กœ์„ธ์Šค๋Š” ๋งˆํ‚น์„ ํ˜ธ์ถœํ•œ๋‹ค. GC๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์‚ฌ์šฉ๋˜๋Š”์ง€ ์•„๋‹Œ์ง€๋ฅผ ์ฐพ์•„๋‚ธ๋‹ค.
  • ์ฐธ์กฐ๋˜๋Š” ๊ฐ์ฒด๋Š” ํŒŒ๋ž€์ƒ‰์œผ๋กœ, ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋Š” ์ฃผํ™ฉ์ƒ‰์œผ๋กœ ๋ณด์—ฌ์ง„๋‹ค.
  • ๋ชจ๋“  ์˜ค๋ธŒ์ ํŠธ๋Š” ๋งˆํ‚น ๋‹จ๊ณ„์—์„œ ๊ฒฐ์ •์„ ์œ„ํ•ด ์Šค์บ”๋˜์–ด์ง„๋‹ค. ๋ชจ๋“  ์˜ค๋ธŒ์ ํŠธ๋ฅผ ์Šค์บ”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๋งŽ์€ ์‹œ๊ฐ„์„ ์†Œ๋ชจํ•˜๊ฒŒ ๋œ๋‹ค.

2. Normal Deletion

  • ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ์ œ๊ฑฐํ•˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ Allocator๋Š” ๋ฐ˜ํ™˜๋˜์–ด ๋น„์–ด์ง„ ๋ธ”๋Ÿญ์˜ ์ฐธ์กฐ ์œ„์น˜๋ฅผ ์ €์žฅํ•ด๋‘๊ณ  ์ƒˆ๋กœ์šด ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ์„ ์–ธ๋˜๋ฉด ํ• ๋‹น๋˜๋„๋ก ํ•œ๋‹ค.

3. Compacting

  • ํผํฌ๋จผ์Šค๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด, ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ์ œ๊ฑฐํ•˜๊ณ  ๋˜ํ•œ ๋‚จ์€ ์ฐธ์กฐ๋˜์–ด์ง€๋Š” ๊ฐ์ฒด๋“ค์„ ๋ฌถ๋Š”๋‹ค.
  • ์ด๋“ค์„ ๋ฌถ์Œ์œผ๋กœ์„œ ๊ณต๊ฐ„์ด ์ƒ๊ธฐ๋ฏ€๋กœ ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์‹œ์— ๋” ์‰ฝ๊ณ  ๋น ๋ฅด๊ฒŒ ์ง„ํ–‰ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Generational Gabage Collection

์„ธ๋Œ€ ๊ฐ„์˜ GC

๋ฐฐ๊ฒฝ

์œ„์™€ ๊ฐ™์ด ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ Mark & Compact ํ•˜๋Š” JVM์€ ๋น„ํšจ์œจ์ ์ด๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทธ๋ž˜ํ”„๋ฅผ ๋ณด๋ฉด,

Y์ถ•์€ ํ• ๋‹น๋œ ๋ฐ”์ดํŠธ์˜ ์ˆ˜์ด๊ณ  X์ถ•์€ ๋ฐ”์ดํŠธ๊ฐ€ ํ• ๋‹น๋  ๋•Œ์˜ ์‹œ๊ฐ„์ด๋‹ค. ๋ณด์‹œ๋‹ค์‹œํ”ผ ์‹œ๊ฐ„์ด ๊ฐˆ์ˆ˜๋ก ์ ์€ ๊ฐ์ฒด๋งŒ์ด ๋‚จ๋Š”๋‹ค. ์œ„์™€ ๊ฐ™์€ ๊ทธ๋ž˜ํ”„์— ๊ธฐ๋ฐ˜ํ•œ ๊ฒƒ์ด Weak Generational Hypothesis ์ด๋‹ค.

Weak Generational Hypothesis

์‹ ๊ทœ๋กœ ์ƒ์„ฑํ•œ ๊ฐ์ฒด์˜ ๋Œ€๋ถ€๋ถ„์€ ๊ธˆ๋ฐฉ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ๊ฐ€ ๋˜๊ณ , ์˜ค๋ž˜๋œ ๊ฐ์ฒด์—์„œ ์‹ ๊ทœ ๊ฐ์ฒด๋กœ์˜ ์ฐธ์กฐ๋Š” ๋งค์šฐ ์ ๊ฒŒ ์กด์žฌํ•œ๋‹ค๋Š” ๊ฐ€์„ค
์ด ๊ฐ€์„ค์— ๊ธฐ๋ฐ˜ํ•˜์—ฌ ์ž๋ฐ”๋Š” Young ์˜์—ญ๊ณผ Old ์˜์—ญ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ถ„ํ• ํ•˜๊ณ , ์‹ ๊ทœ๋กœ ์ƒ์„ฑ๋˜๋Š” ๊ฐ์ฒด๋Š” Young ์˜์—ญ์— ๋ณด๊ด€ํ•˜๊ณ , ์˜ค๋žซ๋™์•ˆ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” Old ์˜์—ญ์— ๋ณด๊ด€ํ•œ๋‹ค.

์˜์—ญ

  1. Young ์˜์—ญ(Yong Generation ์˜์—ญ)
    • ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑํ•œ ๊ฐ์ฒด์˜ ๋Œ€๋ถ€๋ถ„์ด ์—ฌ๊ธฐ์— ์œ„์น˜ํ•œ๋‹ค.
    • ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๊ฐ€ ๊ธˆ๋ฐฉ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ ์ƒํƒœ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค์šฐ ๋งŽ์€ ๊ฐ์ฒด๊ฐ€ Young ์˜์—ญ์— ์ƒ์„ฑ๋˜์—ˆ๋‹ค๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค.
    • ์ด ์˜์—ญ์—์„œ ๊ฐ์ฒด๊ฐ€ ์‚ฌ๋ผ์งˆ๋•Œ Minor GC ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค.
  2. Old ์˜์—ญ(Old Generation ์˜์—ญ)
    • ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ ์ƒํƒœ๋กœ ๋˜์ง€ ์•Š์•„ Young ์˜์—ญ์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๊ฐ€ ์—ฌ๊ธฐ๋กœ ๋ณต์‚ฌ๋œ๋‹ค.
    • ๋Œ€๋ถ€๋ถ„ Young ์˜์—ญ๋ณด๋‹ค ํฌ๊ฒŒ ํ• ๋‹นํ•˜๋ฉฐ, ํฌ๊ธฐ๊ฐ€ ํฐ ๋งŒํผ Young ์˜์—ญ๋ณด๋‹ค GC๋Š” ์ ๊ฒŒ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
    • ์ด ์˜์—ญ์—์„œ ๊ฐ์ฒด๊ฐ€ ์‚ฌ๋ผ์งˆ ๋•Œ Major GC(ํ˜น์€ Full GC) ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ๋งํ•œ๋‹ค.
  3. Permanet ์˜์—ญ
    • Method Area๋ผ๊ณ ๋„ ํ•œ๋‹ค.
    • JVM์ด ํด๋ž˜์Šค๋“ค๊ณผ ๋ฉ”์†Œ๋“œ๋“ค์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋“ค์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.
    • JDK 8๋ถ€ํ„ฐ๋Š” PermGen์€ Metaspace๋กœ ๊ต์ฒด๋œ๋‹ค.

๊ณผ์ •

  1. ์–ด๋– ํ•œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ๋“ค์–ด์˜ค๋ฉด Eden Space์— ํ• ๋‹นํ•œ๋‹ค.
  2. Eden space๊ฐ€ ๊ฐ€๋“์ฐจ๊ฒŒ ๋˜๋ฉด, minor garbage collection์ด ์‹œ์ž‘๋œ๋‹ค.
  3. ์ฐธ์กฐ๋˜๋Š” ๊ฐ์ฒด๋“ค์€ ์ฒซ ๋ฒˆ์งธ survivor(S0)๋กœ ์ด๋™๋˜์–ด์ง€๊ณ , ๋น„ ์ฐธ์กฐ ๊ฐ์ฒด๋Š” Eden space๊ฐ€ clear ๋  ๋•Œ ๋ฐ˜ํ™˜๋œ๋‹ค.
  4. ๋‹ค์Œ minor GC ๋•Œ, Eden space์—์„œ๋Š” ๊ฐ™์€ ์ผ์ด ์ผ์–ด๋‚œ๋‹ค. ๋น„ ์ฐธ์กฐ ๊ฐ์ฒด๋Š” ์‚ญ์ œ๋˜๊ณ  ์ฐธ์กฐ ๊ฐ์ฒด๋Š” survivor space๋กœ ์ด๋™ํ•œ๋‹ค.
    • ๊ทธ๋Ÿฌ๋‚˜ ์ด ์ผ€์ด์Šค์—์„œ ์ฐธ์กฐ ๊ฐ์ฒด๋Š” ๋‘ ๋ฒˆ์งธ survivor space๋กœ ์ด๋™ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
    • ๊ฒŒ๋‹ค๊ฐ€ ์ตœ๊ทผ minor GC์—์„œ ์ฒซ ๋ฒˆ์งธ survivor space๋กœ ์ด๋™๋œ ๊ฐ์ฒด๋“ค๋„ age๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ณ  S1 ๊ณต๊ฐ„์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค.
    • ํ•œ๋ฒˆ ๋ชจ๋“  surviving ๊ฐ์ฒด๋“ค์ด S1์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋˜๋ฉด S0์™€ Eden ๊ณต๊ฐ„์€ Clear ๋œ๋‹ค.
    • ์ฃผ์˜ํ•ด์•ผํ•  ์ ์€ ์ด์ œ ์šฐ๋ฆฌ๋Š” ๋‹ค๋ฅธ aged ๊ฐ์ฒด๋“ค์„ ์„œ๋ฐ”์ด๋ฒ„ ๊ณต๊ฐ„์— ๊ฐ€์ง€๊ฒŒ ๋˜์—ˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
  5. ๋‹ค์Œ minor GC ๋•Œ, ๊ฐ™์€ ๊ณผ์ •์ด ๋ฐ˜๋ณต ๋ฉ๋‹ˆ๋‹ค.
    1. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋ฒˆ์—” survivor space๋“ค์€ switch ๋œ๋‹ค.
    2. ์ฐธ์กฐ๋˜๋Š” ๊ฐ์ฒด๋“ค์€ S0๋กœ ์ด๋™ํ•œ๋‹ค. ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์€ aged๋˜๊ณ  Eden๊ณผ S1 ๊ณต๊ฐ„์€ Clear ๋ฉ๋‹ˆ๋‹ค.
  6. ์•„๋ž˜ ๊ทธ๋žจ์€ promotion์„ ๋ณด์—ฌ์ค€๋‹ค.
    • minor GC ํ›„ aged ์˜ค๋ธŒ์ ํŠธ๋“ค์ด ์ผ์ •ํ•œ age threshold(๋ฌธ์ง€๋ฐฉ)์„ ๋„˜๊ฒŒ ๋˜๋ฉด ๊ทธ๋“ค์€ young generation์—์„œ old๋กœ promotion ๋œ๋‹ค.
    • ์—ฌ๊ธฐ์„œ๋Š” 8์„ ์˜ˆ๋กœ ๋“ค์—ˆ๋‹ค.
  7. minor GC๊ฐ€ ๊ณ„์†๋˜๊ณ  ๊ณ„์†ํ•ด์„œ ๊ฐ์ฒด๋“ค์ด Old Generation์œผ๋กœ ์ด๋™๋œ๋‹ค.
  8. ์•„๋ž˜ ๊ทธ๋ฆผ์€ ์ „ ๊ณผ์ •์„ ๋ณด์—ฌ์ฃผ๊ณ  ์žˆ๋‹ค.
    • ๊ฒฐ๊ตญ major GC๊ฐ€ old Generation์— ์‹œํ–‰๋˜๊ณ , old Generation์€ Clear ๋˜๊ณ , ๊ณต๊ฐ„์ด Compact ๋˜์–ด์ง„๋‹ค.

 

Minor GC์™€ Major GC์˜ ์ฐจ์ด์ 

Minor GC๋Š” Eden ์˜์—ญ์—์„œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด์— ๋Œ€ํ•ด ์ž‘๋™์ด ๋œ๋‹ค. JVM์ด ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•˜๋ฉด ๋ฐœ์ƒ๋˜๋Š” GC์ด๋‹ค.

๋ฐ˜๋ฉด, Major GC๋Š” Tenured ์˜์—ญ์—์„œ ์ž‘๋™์ด ๋œ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ์— Minor GC๊ฐ€ ๋ฐœ์ƒ๋˜๊ณ  ๊ทธ ๋‹ค์Œ์œผ๋กœ ๋ฐœ์ƒ๋œ๋‹ค.

 

Minor GC vs Major GC vs Full GC | Plumbr – User Experience & Application Performance Monitoring

Do you know what differentiates Minor GC, Major GC and Full GC events within the JVM? Is this separation even necessary? The post busts some myths about the GC behavior while explaining the way GC…

plumbr.io

 

ํ•œ๊ณ„

  • ์–ด๋–ค ๋ฐฉ์‹์˜ GC๋ฅผ ์‚ฌ์šฉํ•˜๋“  ์‹คํ–‰ ์‹œ๊ฐ„์— ์ž‘์—…์„ ํ•˜๋Š” ์ด์ƒ ์„ฑ๋Šฅ ํ•˜๋ฝ์„ ํ”ผํ•  ์ˆ˜ ์—†๋‹ค.
  • ์“ฐ๋ ˆ๊ธฐ ์ˆ˜์ง‘๊ธฐ๊ฐ€ ์กด์žฌํ•˜๋”๋ผ๋„ ๋” ์ด์ƒ ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋งŒ ํšŒ์ˆ˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜๋Š” ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(memory leak) ํ˜„์ƒ์€ ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณ„์† ์ ์œ ํ•˜๊ณ  ์žˆ๋Š” ํ˜„์ƒ์ด๋‹ค. ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ ๋‹ค์Œ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ๋ˆ„์ ๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋‚ญ๋น„๋œ๋‹ค. ์ฆ‰, ๋” ์ด์ƒ ๋ถˆํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•ด์ œ๋˜์ง€ ์•Š์œผ๋ฉด์„œ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ์ž˜๋ชป ๊ด€๋ฆฌํ•  ๋•Œ ๋ฐœ์ƒํ•œ๋‹ค.

 

์ฐธ๊ณ 

'๐Ÿ’Ž > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Java] Java SE, Java EE, Java ME  (0) 2021.08.18
[Java] ๋ณ€์ˆ˜์˜ scope์™€ static  (0) 2021.08.11
[Java] ๋žŒ๋‹ค์‹  (0) 2021.08.10
[Java] ์ŠคํŠธ๋ฆผ Stream  (0) 2021.07.28
[Java] ์ œ๋„ค๋ฆญ(Generic)  (0) 2021.07.28

๋Œ“๊ธ€