๊ด€๋ฆฌ ๋ฉ”๋‰ด

JiYoung Dev ๐Ÿ–ฅ

๊ธฐ์ˆ  ๋ฉด์ ‘ ์ค€๋น„ 2. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Garbage Collection) ๋ณธ๋ฌธ

Study/Java

๊ธฐ์ˆ  ๋ฉด์ ‘ ์ค€๋น„ 2. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Garbage Collection)

Shinjio 2023. 11. 1. 20:25
์˜ˆ์ƒ ์งˆ๋ฌธ. ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰ํ„ฐ๋ž€? ํ•„์š”ํ•œ ์ด์œ ์™€ ๋™์ž‘ ๋ฐฉ์‹

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


๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฒ• ์ค‘์˜ ํ•˜๋‚˜๋กœ, ํ”„๋กœ๊ทธ๋žจ์ด ๋™์ ์œผ๋กœ ํ• ๋‹นํ–ˆ๋˜ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ์ค‘์—์„œ ํ•„์š”์—†๊ฒŒ ๋œ ์˜์—ญ์„ ํ•ด์ œํ•˜๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

C์–ธ์–ด๋‚˜ C++ ๊ฐ™์€ ์–ธ์–ด๋Š” ์ˆ˜๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋„๋ก ์„ค๊ณ„๋œ ๋ฐ˜๋ฉด, Java์™€ C#๊ณผ ๊ฐ™์€ ์–ธ์–ด์—์„œ๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ํ†ตํ•ด ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, C์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ํ• ๋‹น๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ๋‹ค ์“ฐ๋ฉด ๋‹ค์‹œ ํ•ด์ œํ•ด์„œ ์šด์˜์ฒด์ œ๋กœ ๋ฐ˜ํ™˜ํ•ด์•ผํ•œ๋‹ค. ๋งŒ์•ฝ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ ์  ์ปค์ง€๋‹ค๊ฐ€ ์šด์˜์ฒด์ œ์— ์˜ํ•ด ์‹œ๊ทธ๋„์„ ๋งž๊ณ  ์ฃฝ๊ฒŒ๋œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜์ง€ ์•Š์•„์„œ ์ƒ๊ธฐ๋Š” ๋ฒ„๊ทธ '๋ฉ”๋ชจ๋ฆฌ ๋ฆญ(Memory Leak)'์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์ด๋‹ค. 

 

๋ฐ˜๋ฉด, ์ž๋ฐ”๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ๊ด€๋ฆฌํ•ด์ค€๋‹ค. ์ž๋ฐ” ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ์ง์ ‘ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์˜ ํ• ๋‹น๊ณผ ๋ฐ˜ํ™˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋Œ€์‹  JVM์„ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น ๋ฐ›๋Š”๋‹ค. ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” JVM์ด ์•Œ์•„์„œ ํšŒ์ˆ˜ํ•œ ๋‹ค์Œ ํ•ด์ œํ•ด์ค€๋‹ค. JVM์˜ ์ด๋Ÿฌํ•œ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ ๋™์ž‘์„ '๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Garbage Collection)'์ด๋ผ๊ณ  ํ•œ๋‹ค. (JVM์˜ ์‹คํ–‰ ์—”์ง„์— Garbage Collector๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค)

 

๋‹ค์‹œ ๋งํ•ด ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Garbage Collection, GC)๋ž€ ์ž๋ฐ”์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ• ์ค‘์˜ ํ•˜๋‚˜๋กœ JVM์˜ Heap ์˜์—ญ์—์„œ ๋™์ ์œผ๋กœ ํ• ๋‹นํ–ˆ๋˜ ๋ฉ”๋ชจ๋ฆฌ ์ค‘ ํ•„์š”์—†๊ฒŒ ๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ฐ์ฒด(garbage)๋ฅผ ๋ชจ์•„ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ œ๊ฑฐํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฃผ์ฒด๋ฅผ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ(Garbage Collector)๋ผ๊ณ  ํ•œ๋‹ค. 

 

JVM ๊ด€๋ จ ์ž๋ฃŒ :

 

๊ธฐ์ˆ  ๋ฉด์ ‘ ์ค€๋น„ 1. Java ์–ธ์–ด์˜ ํŠน์ง• (+JVM๊ณผ ์ž๋ฐ”์˜ ์ปดํŒŒ์ผ ๋ฐฉ์‹, JRE vs JDK)

Java๋ž€? ์ฌ ๋งˆ์ดํฌ๋กœ์‹œ์Šคํ…œ์ฆˆ(Sun Microsystems, Inc.)์—์„œ ๊ฐœ๋ฐœํ•˜์—ฌ 1996๋…„ 1์›”์— ๊ณต์‹์ ์œผ๋กœ ๋ฐœํ‘œํ•œ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์–ธ์–ด ์ดˆ๊ธฐ์— ์ œ์ž„์Šค ๊ณ ์Šฌ๋ง(James Gosling)์ด๋ž€ ์—”์ง€๋‹ˆ์–ด๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ฐ€์ „์ œํ’ˆ์—

danyoujeong.tistory.com

 

๊ฐ€๋น„์ง€(Garbage)๋ž€?


Heap ์˜์—ญ์˜ ๊ฐ์ฒด ์ค‘ Stack์—์„œ ๋„๋‹ฌ ๋ถˆ๊ฐ€๋Šฅํ•œ(Unrecheable) ๊ฐ์ฒด๋“ค์€ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์˜ ๋Œ€์ƒ์ด ๋œ๋‹ค. 

 

Product product = new Product("TV");

sellTo(product);

product = null;
Person person = new Person("Dave");
person.sayHello();

person = new Person("Eric");
person.sayHello();

 

์œ„์˜ ๋‘ ๊ฐœ์˜ ์ฝ”๋“œ์˜ ์ฒซ ์ค„์—์„œ new Product("TV")์™€ new Person("Dave")๋Š” ๋ฉ”๋ชจ๋ฆฌ ์–ด๋”˜๊ฐ€(Heap ์˜์—ญ)์— ํ• ๋‹น๋˜์—ˆ์„ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ•ด๋‹น ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ๊ฐ€๋ฆฌํ‚ค๋˜ product๋Š” null์ด ๋˜๊ณ , person์€ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•œ๋‹ค. ์ด๋Ÿด ๋•Œ ์ด์ „์— ์ฐธ์กฐ๋˜์—ˆ๋˜ new Product("TV")์™€ new Person("Dave") ๊ฐ์ฒด๋Š” ์–ด๋– ํ•œ ๊ฒฝ๋กœ๋กœ๋„ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” "Unreachable ์ƒํƒœ"๊ฐ€ ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ์ƒํƒœ๊ฐ€ ๋œ ๊ฐ์ฒด๋Š” ๊ฐ€๋น„์ง€๋กœ ํŒ๋‹จ๋˜์–ด ํšŒ์ˆ˜๋‹นํ•˜๊ฒŒ ๋œ๋‹ค. 

 

Stop-the-world (STW)
๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๊ฐ€๋น„์ง€๋“ค์„ ํšŒ์ˆ˜ํ•˜๋Š” ๋™์ž‘์ด ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ์—์„œ ์กฐ์šฉํžˆ ์ˆ˜ํ–‰๋˜๋ฉด ํฐ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋Š” ์ข…์ข… ๊ฐ€๋น„์ง€๋“ค์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํšŒ์ˆ˜ํ•˜๊ธฐ ์œ„ํ•ด ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‹คํ–‰์„ ๋ฉˆ์ถ˜๋‹ค. ์ด๋Ÿฌํ•œ ๋™์ž‘์€ 'Stop-the-world'๋ผ๊ณ  ํ•œ๋‹ค. ๋Œ€๋ถ€๋ถ„ JVM์—์„œ GC ํŠœ๋‹์ด๋ผ๊ณ  ํ•˜๋ฉด ์ด Stop-the-world ์‹œ๊ฐ„์„ ์ค„์ด๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. 

 

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Garbage Collection) ๋™์ž‘ ๋ฐฉ์‹


Mark and Sweep

  • Mark : ๋จผ์ € Root Space๋กœ๋ถ€ํ„ฐ ๊ทธ๋ž˜ํ”„ ์ˆœํšŒ๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ๋œ ๊ฐ์ฒด๋“ค์„ ์ฐพ์•„๋‚ด์–ด ๊ฐ๊ฐ ์–ด๋–ค ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š”์ง€ ์ฐพ์•„์„œ ๋งˆํ‚นํ•œ๋‹ค. 
  • Sweep : ์ฐธ์กฐํ•˜๊ณ  ์žˆ์ง€ ์•Š๋Š” ๊ฐ์ฒด ์ฆ‰ Unreachable ๊ฐ์ฒด๋“ค์„ Heap์—์„œ ์ œ๊ฑฐํ•œ๋‹ค.
  • Compact : Sweep ํ›„ ๋ถ„์‚ฐ๋œ ๊ฐ์ฒด๋“ค์„ Heap์˜ ์‹œ์ž‘ ์ฃผ์†Œ๋กœ ๋ชจ์•„ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ• ๋‹น๋œ ๋ถ€๋ถ„๊ณผ ๊ทธ๋ ‡์ง€ ์•Š์€ ๋ถ€๋ถ„์œผ๋กœ ์••์ถ•ํ•œ๋‹ค. (๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ์ง„ํ–‰ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์Œ) 

 

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Garbage Collection) ๋™์ž‘ ๊ณผ์ •


JVM์˜ Heap ์˜์—ญ์€ ์ฒ˜์Œ ์„ค๊ณ„๋  ๋•Œ 2๊ฐ€์ง€๋ฅผ ์ „์ œ(Weak Generational Hypothesis)๋กœ ์„ค๊ณ„๋˜์—ˆ๋‹ค. 

  1. ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๋Š” ๊ธˆ๋ฐฉ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅํ•œ ์ƒํƒœ(Unreachable)๊ฐ€ ๋œ๋‹ค. 
  2. ์˜ค๋ž˜๋œ ๊ฐ์ฒด์—์„œ ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋กœ์˜ ์ฐธ์กฐ๋Š” ์•„์ฃผ ์ ๊ฒŒ ์กด์žฌํ•œ๋‹ค. 

์ด๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๋Š” ์ผํšŒ์„ฑ์ด๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ์— ์˜ค๋žซ๋™์•ˆ ๋‚จ์•„์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ๋“œ๋ฏˆ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค. ๋”ฐ๋ผ์„œ JVM ๋ฉ”๋ชจ๋ฆฌ๋Š” ๊ฐ์ฒด์˜ ์ƒ์กด ๊ธฐ๊ฐ„์— ๋”ฐ๋ผ ๋ฌผ๋ฆฌ์ ์ธ Heap ์˜์—ญ์„ Young, Old 2๊ฐ€์ง€ ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ„๊ฒŒ ๋˜์—ˆ๋‹ค. Young ์˜์—ญ์€ ๋‹ค์‹œ 'Eden' ์˜์—ญ๊ณผ ๋‘ ๊ตฐ๋ฐ์˜ Survivor ์˜์—ญ(S0, S1)์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•œ๋‹ค. 

 

Young ์˜์—ญ(Young Generation) 

์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๊ฐ€ ํ• ๋‹น(Allocation)๋˜๋Š” ์˜์—ญ์ด๋ฉฐ Young Generation ์˜์—ญ์—์„œ ๋ฐœ์ƒํ•˜๋Š” GC๋ฅผ Minor GC๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. 

๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๊ฐ€ ๊ธˆ๋ฐฉ Unreachacble ์ƒํƒœ๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์—, ๋งŽ์€ ๊ฐ์ฒด๊ฐ€ Young ์˜์—ญ์— ์ƒ์„ฑ๋˜์—ˆ๋‹ค๊ฐ€ ์‚ฌ๋ผ์ง„๋‹ค. 

Young ์˜์—ญ์€ ๋‹ค์‹œ Eden ์˜์—ญ๊ณผ ๋‘ ๊ตฐ๋ฐ์˜ Survivor ์˜์—ญ(S0, S1)์œผ๋กœ ๋‚˜๋ˆ„์–ด ๊ด€๋ฆฌํ•œ๋‹ค.

Minor GC๋Š” ์ƒ๋Œ€์ ์œผ๋กœ ๋นˆ๋ฒˆํ•˜๊ฒŒ ๋ฐœ์ƒํ•˜์ง€๋งŒ ์งง๊ฒŒ ๋๋‚œ๋‹ค. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์˜ ๋™์ž‘์ธ Old Generation๊นŒ์ง€ ์Šค์บ”ํ•ด์„œ ๊ฐ€๋น„์ง€๋ฅผ ์ฐพ์ง€ ์•Š๋„๋กํ•ด์„œ ๋”์šฑ ์งง์€ Stop-the-world ์‹œ๊ฐ„ ์•ˆ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšŒ์ˆ˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.  

Old ์˜์—ญ(Old Generation)

Young ์˜์—ญ์—์„œ Reachable ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•˜์—ฌ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๊ฐ€ ๋ณต์‚ฌ๋˜๋Š” ์˜์—ญ์œผ๋กœ Young Generation ์˜์—ญ์—์„œ Old Generation ์˜์—ญ์œผ๋กœ ๊ฐ์ฒด๊ฐ€ ์ด๋™ํ•˜๋Š” ๊ฒƒ์„ 'Promotion'์ด๋ผ๊ณ  ํ•œ๋‹ค. 

Young ๋ณด๋‹ค ํฌ๊ฒŒ ํ• ๋‹น๋˜๋ฉฐ, ์˜์—ญ์˜ ํฌ๊ธฐ๊ฐ€ ํฐ ๋งŒํผ ๊ฐ€๋น„์ง€๋Š” ์ ๊ฒŒ ๋ฐœ์ƒํ•œ๋‹ค. 

Old ์˜์—ญ์— ๋Œ€ํ•œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ Major GC๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. 

 

์ถœ์ฒ˜ : https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

 

Garbage Collection ๋™์ž‘ ๊ณผ์ •

์•ž์—์„œ Young Generation ์˜์—ญ์—์„œ Old Generation ์˜์—ญ์œผ๋กœ ๊ฐ์ฒด๊ฐ€ ์ด๋™ํ•˜๋Š” ํ–‰์œ„๋ฅผ 'Promotion'์ด๋ผ๊ณ  ํ–ˆ๋‹ค. Promotion์˜ ๊ณผ์ •์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. 

  1. ์šฐ์„  ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋“ค์€ Eden ์˜์—ญ์— ์ƒ์„ฑ๋œ๋‹ค. 
  2. ๊ฐ์ฒด์˜ ์ƒ์„ฑ์ด ๊ณ„์†๋˜๋ฉด Eden ์˜์—ญ์ด ๊ฐ€๋“์ฐฌ๋‹ค.
  3. ๊ทธ๋Ÿฌ๋ฉด Minor GC๊ฐ€ ๋ฐœ์ƒํ•ด์„œ Eden ์˜์—ญ์— ์žˆ๋Š” ๊ฐ€๋น„์ง€๋“ค์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํšŒ์ˆ˜ํ•œ๋‹ค.
    1. Mark ๋™์ž‘์„ ํ†ตํ•ด Eden ์˜์—ญ์˜ reachable ๊ฐ์ฒด๋ฅผ ํƒ์ƒ‰ํ•œ๋‹ค. 
    2. Eden ์˜์—ญ์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด(unreachable)์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•œ๋‹ค. (Sweep)
  4. Eden์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์€ ๋‘ ๊ฐœ์˜ survivor ์˜์—ญ(S0, S1) ์ค‘ ํ•˜๋‚˜๋กœ ์˜ฎ๊ฒจ์ง„๋‹ค. S0๋ฅผ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๊ณ  ํ•œ๋‹ค. ์˜ฎ๊ฒจ์ง„ ๊ฐ์ฒด์—๋Š” age ๊ฐ’์ด ๋งค๊ฒจ์ง„๋‹ค. 
  5. ๋ช‡ ๋ฒˆ์˜ Minor GC๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด์„œ ์‚ด์•„๋‚จ์€ Eden ๊ฐ์ฒด๋“ค์ด S0 ์˜์—ญ์œผ๋กœ ์ฑ„์›Œ์ง€๋‹ค ๋ณด๋ฉด, ๊ฒฐ๊ตญ S0 ์˜์—ญ๋„ ๊ฐ€๋“์ฐฌ๋‹ค. ์ด ๋•Œ, S0 ์˜์—ญ์— ์žˆ๋Š” ๊ฐ์ฒด์— ๋Œ€ํ•ด์„œ๋„ ๊ฐ€๋น„์ง€ ์—ฌ๋ถ€๋ฅผ ํŒ๋‹จํ•ด ํšŒ์ˆ˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ํšŒ์ˆ˜ํ•œ๋‹ค. (Minor GC)
  6. S0 ์˜์—ญ์— ์žˆ๋Š” ๊ฐ์ฒด๋“ค ์ค‘ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” ๋˜ ๋‹ค๋ฅธ survivor ์˜์—ญ์ธ S1์œผ๋กœ ์˜ฎ๊ฒจ์ง„๋‹ค. ๊ทธ๋Ÿฌ๋ฉด์„œ Age ๊ฐ’์ด 1 ์ฆ๊ฐ€ํ•œ๋‹ค. S0 ์˜์—ญ์€ ๋น„์›Œ์ ธ์žˆ๋Š” ์ฑ„๋กœ ๋†”๋‘”๋‹ค. 
  7. ๊ณ„์† ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์€ S0์™€ S1์„ ์˜ค๊ฐ€๋ฉด์„œ age๊ฐ’์ด ์˜ฌ๋ผ๊ฐ„๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ์ผ์ • ์ˆ˜์ค€ ์ด์ƒ์œผ๋กœ age๊ฐ€ ์˜ฌ๋ผ๊ฐ€๋ฉด ๊ฐ์ฒด๋Š” Old Generation ์˜์—ญ์œผ๋กœ ์˜ฎ๊ธด๋‹ค. (promotion)
  8. Old Generation ์˜์—ญ์˜ ๋ฏธ์‚ฌ์šฉ ๊ฐ์ฒด๋Š” Full GC(Major GC)๋ฅผ ํ†ตํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•œ๋‹ค. 
    • Major GC๋Š” Old ์˜์—ญ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€๋“์ฐจ๋ฉด GC๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋‹จ์ˆœํ•œ ๋ฐฉ์‹์ด๋‹ค. 
    • Old ์˜์—ญ์— ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ—ˆ์šฉ์น˜๋ฅผ ๋„˜๊ฒŒ ๋˜๋ฉด, Old ์˜์—ญ์— ์žˆ๋Š” ๋ชจ๋“  ๊ฐ์ฒด๋“ค์„ ๊ฒ€์‚ฌํ•˜์—ฌ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋“ค์„ ํ•œ๊บผ๋ฒˆ์— ์‚ญ์ œํ•˜๋Š” ๋ฐฉ์‹
    • ํ•˜์ง€๋งŒ Old Generation์€ Young Generation์— ๋น„ํ•ด ์ƒ๋Œ€์ ์œผ๋กœ ํฐ ๊ณต๊ฐ„์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด, ์ด ๊ณต๊ฐ„์—์„œ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์˜ ๊ฐ์ฒด ์ œ๊ฑฐ์— ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค. 

 

 

์˜ˆ์ƒ ์งˆ๋ฌธ ๋‹ตํ•˜๊ธฐ

Q. ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰ํ„ฐ๋ž€? ํ•„์š”ํ•œ ์ด์œ ์™€ ๋™์ž‘ ๋ฐฉ์‹


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

๋™์ž‘ ๋ฐฉ์‹์€ Heap ์˜์—ญ์˜ Young Generation ์˜์—ญ๊ณผ Old Generation ์˜์—ญ์— ๋”ฐ๋ผ ์•ฝ๊ฐ„ ๋‹ค๋ฆ…๋‹ˆ๋‹ค. ๋จผ์ € ๊ฐ์ฒด๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด Young Generation์˜ Eden ์˜์—ญ์— ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  Eden ์˜์—ญ์ด ๊ฐ€๋“ ์ฐจ๋ฉด Minor GC๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. Minor GC๋Š” Mark and Sweep ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‹๋ณ„ํ•ด ํ•ด์ œํ•˜๋Š” ์ž‘์—…์„ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. Minor GC์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์— age๋ฅผ ๋ถ€์—ฌํ•ฉ๋‹ˆ๋‹ค. Minor GC์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” S0 ํ˜น์€ S1 ์˜์—ญ์— ํ• ๋‹น๋˜๊ณ  S0, S1์„ ์˜ค๊ฐ€๋ฉด์„œ age๊ฐ€ ์˜ฌ๋ผ๊ฐ‘๋‹ˆ๋‹ค. ์ผ์ • age ์ด์ƒ์ด ๋˜๋ฉด OId Generation ์˜์—ญ์œผ๋กœ ์ด๋™ํ• ์ง€ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค. Old Generation ์˜์—ญ์ด ๊ฐ€๋“์ฐจ๋ฉด Major GC๊ฐ€ ์ผ์–ด๋‚˜ ๊ฐ€๋น„์ง€๋ฅผ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. 

 

์ฐธ๊ณ ์ž๋ฃŒ


 

[Java] ์ž๋ฐ” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๊ธฐ์ดˆ(Garbage Collection Basic)

์ž๋ฐ” ๊ฐœ๋ฐœ์ž๋ผ๋ฉด '๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Garbage Collection)'์— ๋Œ€ํ•ด์„œ ๊ณ ๋ฏผํ•˜๊ฒŒ ๋˜๋Š” ์ˆœ๊ฐ„์ด ์˜จ๋‹ค. ํ† ์ด ํ”„๋กœ์ ํŠธ๋‚˜ ์ž‘์€ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์— ๋Œ€ํ•œ ๊ด€์‹ฌ์ด ์ ๋‹ค. ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ์˜ ์„ ํƒ์ด ์„ฑ๋Šฅ

hbase.tistory.com

 

 

[Java] ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ ์ด๋ฒˆ์— ๋๋‚ด์ž!!!!!!!!!!!!

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ ๋ถ€์ˆด๋ฒ„๋ฆฌ์ž!

velog.io

 

 

[Java] Garbage Collection(๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜)์˜ ๊ฐœ๋… ๋ฐ ๋™์ž‘ ์›๋ฆฌ (1/2)

1. Garbage Collection(๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜)์ด๋ž€? [ Garbage Collection(๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜)์ด๋ž€? ] ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐœ๋ฐœ ํ•˜๋‹ค ๋ณด๋ฉด ์œ ํšจํ•˜์ง€ ์•Š์€ ๋ฉ”๋ชจ๋ฆฌ์ธ ๊ฐ€๋ฐ”์ง€(Garbage)๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋œ๋‹ค. C์–ธ์–ด๋ฅผ ์ด์šฉํ•˜๋ฉด free()๋ผ๋Š” ํ•จ

mangkyu.tistory.com

 

 

โ˜• ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ ๋™์ž‘ ์›๋ฆฌ & GC ์ข…๋ฅ˜ ๐Ÿ’ฏ ์ด์ •๋ฆฌ

Garbage Collection(GC) ์ด๋ž€? ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜(Garbage Collection, ์ดํ•˜ GC)์€ ์ž๋ฐ”์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ• ์ค‘์˜ ํ•˜๋‚˜๋กœ JVM(์ž๋ฐ” ๊ฐ€์ƒ ๋จธ์‹ )์˜ Heap ์˜์—ญ์—์„œ ๋™์ ์œผ๋กœ ํ• ๋‹นํ–ˆ๋˜ ๋ฉ”๋ชจ๋ฆฌ ์ค‘ ํ•„์š” ์—†๊ฒŒ ๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ฐ

inpa.tistory.com

 

 

[Java] GC(Garbage Collection) ์ดํ•ดํ•˜๊ธฐ

๋“ค์–ด๊ฐ€๋ฉฐ Java์˜ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋Š” ๋‹ค์–‘ํ•œ ์ข…๋ฅ˜๊ฐ€ ์žˆ์ง€๋งŒ ๊ณตํ†ต์ ์œผ๋กœ ๋‹ค์Œ์˜ 2๊ฐ€์ง€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ํž™(Heap) ๋‚ด์˜ ๊ฐ์ฒด ์ค‘ Garbage๋ฅผ ์ฐพ์•„๋‚ธ๋‹ค. ์ฐพ์•„๋‚ธ Garbage ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšŒ์ˆ˜ํ•œ๋‹ค. ์ตœ

jangjjolkit.tistory.com