Notice
Recent Posts
Link
Today
Total
10-06 02:35
๊ด€๋ฆฌ ๋ฉ”๋‰ด

dingdong coding

[ JAVA ] Garbage Collection ๋ณธ๋ฌธ

๐ŸฐJAVA/Basic

[ JAVA ] Garbage Collection

๐Ÿถ ๊ฐœ๋ฐœ๊ฐœ๋ฐœ ๐Ÿพ 2022. 7. 1. 15:47

GC ( Garbage Collection ) 

GC๋ž€ Heap ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์žฌํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด Root Set์—์„œ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋“ค์„ ํ•ด์ œํ•ด ๊ฐ€์šฉ๊ฐ€๋Šฅํ•œ ๊ณต๊ฐ„์„ ๋งŒ๋“œ๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค.

 

* ์ฐธ์กฐ๋œ ๊ฐœ์ฒด : ํ”„๋กœ๊ทธ๋žจ์˜ ์ผ๋ถ€๊ฐ€ ์—ฌ์ „ํžˆ ํ•ด๋‹น ๊ฐœ์ฒด์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์žˆ์Œ์„ ์˜๋ฏธ

* ์ฐธ์กฐ๋˜์ง€ ์•Š์€ ๊ฐœ์ฒด : ํ”„๋กœ๊ทธ๋žจ์˜ ์–ด๋–ค ๋ถ€๋ถ„์—์„œ๋„ ๋” ์ด์ƒ ์ฐธ์กฐ๋˜์ง€ ์•Š์Œ ๋”ฐ๋ผ์„œ ํ•ด๋‹น ๊ฐœ์ฒด๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ํšŒ์ˆ˜ 

 

์ž๋ฐ”์—์„œ๋Š” ์ด๋Ÿฌํ•œ ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ ์ž‘์—…์„ Garbage Colletor๊ฐ€ ๋‹ด๋‹นํ•˜๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜๋Š” ์ž‘์—…์€ Garbage Collection์ด๋ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰ null, System.gc() ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๋“ฑ๊ณผ ๊ฐ™์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •ํ•ด ํ•ด์ œํ•˜๋Š” ์ž‘์—…์€ ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค. null๋กœ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์€ ํฐ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์ง€๋งŒ System.gc() ๋ฉ”์„œ๋“œ๋Š” ์‹œ์Šคํ…œ ์„ฑ๋Šฅ์— ๋งค์šฐ ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋ฏ€๋กœ ์ ˆ๋Œ€ ์‚ฌ์šฉํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค.

Heap Young, Old

๊ฐ์ฒด๋Š” ๋Œ€๋ถ€๋ถ„ ์ผํšŒ์„ฑ์ด๊ณ , ๋ฉ”๋ชจ๋ฆฌ์— ์˜ค๋ž˜ ๋‚จ์•„์žˆ๋Š” ๊ฒฝ์šฐ๋Š” ๋“œ๋ฌผ๊ธฐ ๋•Œ๋ฌธ์— Heap์„ ์ƒ์กด๊ธฐ๊ฐ„์— ๋”ฐ๋ผ ํฌ๊ฒŒ 2๊ฐœ์˜ ๋ฌผ๋ฆฌ์ ์ธ ๊ณต๊ฐ„์„ ๋‚˜๋ˆ„๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.  Young ์˜์—ญ๊ณผ Old ์˜์—ญ

 

https://d2.naver.com/helloworld/1329

 

1 ) Young  ์˜์—ญ

  ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑํ•œ ๊ฐ์ฒด์˜ ๋Œ€๋ถ€๋ถ„์ด ์—ฌ๊ธฐ์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค.

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

  ์ด ์˜์—ญ์—์„œ ๊ฐ์ฒด๊ฐ€ ์‚ฌ๋ผ์งˆ๋•Œ Minor GC๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค.

  ์ˆ˜๋ช…์ด ์งง์€ ๊ฐ์ฒด๋“ค์ด ๋ณดํ†ต Young์— ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค.

 

2 ) Old ์˜์—ญ

•  ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ ์ƒํƒœ๋กœ ๋˜์ง€ ์•Š์•„ Young ์˜์—ญ์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๊ฐ€ ์—ฌ๊ธฐ๋กœ ๋ณต์‚ฌ๋ฉ๋‹ˆ๋‹ค.

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

  ์ด ์˜์—ญ์—์„œ ๊ฐ์ฒด๊ฐ€ ์‚ฌ๋ผ์งˆ ๋•Œ Major GC(ํ˜น์€ Full GC)๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค.

  ์ฆ‰ ํฐ ๊ฐ์ฒด๋“ค์ด Old์— ํ• ๋‹น๋ฉ๋‹ˆ๋‹ค. 

 

์ด๋Ÿฌํ•œ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด GC๊ฐ€ ์ „์ฒด ์˜์—ญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋‚˜ํƒ€๋‚˜๋Š” ์ด์ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

 

Young์€  Old๋ณด๋‹ค ์‚ฌ์ด์ฆˆ๊ฐ€ ์ž‘๊ณ , GC๊ฐ€ ์ „์ฒด ์˜์—ญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์‹œ๊ฐ„์ด ๋œ ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ค‘์ง€๋˜๋Š”( stop-the-world ) ์‹œ๊ฐ„์ด ์งง์•„ ์ง‘๋‹ˆ๋‹ค. ๋˜ํ•œ Young ์„ ํ•œ ๋ฒˆ์— ๋น„์šฐ๊ธฐ ๋•Œ๋ฌธ์— ์—ฐ์†๋œ ์—ฌ์œ ๊ณต๊ฐ„์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

** stop-the world : JVM์ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์‹คํ–‰์„ ๋ฉˆ์ถ”๋Š” ์ž‘์—…์œผ๋กœ GC๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์“ฐ๋ ˆ๋“œ๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ์“ฐ๋ ˆ๋“œ ์ž‘์—…์„ ์ค‘๋‹จ์‹œํ‚ค๋Š” ๊ฒƒ

Young ์˜์—ญ

   Young์˜์—ญ์€ Eden ์˜์—ญ, Survivor ์˜์—ญ์œผ๋กœ ๋‚˜๋ˆ ์ง‘๋‹ˆ๋‹ค. 

 

1. ์ƒˆ๋กœ ์ƒ์„ฑํ•œ ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๋Š” Eden ์˜์—ญ์— ์œ„์น˜

2. Eden์˜์—ญ์—์„œ GC๊ฐ€ ํ•œ ๋ฒˆ ๋ฐœ์ƒํ•œ ํ›„ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋Š” Survivor ์˜์—ญ ์ค‘ ํ•˜๋‚˜๋กœ ์ด๋™ 

3. Eden ์˜์—ญ์—์„œ GC๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ด๋ฏธ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š” Survivor ์˜์—ญ์œผ๋กœ ๊ฐ์ฒด๊ฐ€ ๊ณ„์† ์Œ“์ž„

4. ํ•˜๋‚˜์˜ Survivor ์˜์—ญ์ด ๊ฐ€๋“ ์ฐจ๊ฒŒ ๋˜๋ฉด ๊ทธ ์ค‘์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฅธ Survivor ์˜์—ญ์œผ๋กœ ์ด๋™ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ€๋“ ์ฐฌ Survivor ์˜์—ญ์€ ์•„๋ฌด ๋ฐ์ดํ„ฐ๋„ ์—†๋Š” ์ƒํƒœ๋กœ ๋จ

5. ์ด ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋‹ค๊ฐ€ ๊ณ„์†ํ•ด์„œ ์‚ด์•„๋‚จ์•„ ์žˆ๋Š” ๊ฐ์ฒด๋Š” Old ์˜์—ญ์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค.

 

 

https://mangkyu.tistory.com/118

Old ์˜์—ญ

Old ์˜์—ญ์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ€๋“์ฐจ๋ฉด GC๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด๋“ค์ด ๊ณ„์† Old์˜์—ญ์œผ๋กœ ์ด๋™ํ•ด Old ์˜์—ญ์˜ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ด์ง€๋ฉด ๋ฐœ์ƒํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Garbage Collection ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ข…๋ฅ˜

  • Serial GC 
  • Parallel GC
  • Parallel Old GC(Parallel Compacting GC)
  • Concurrent Mark & Sweep GC(์ดํ•˜ CMS)
  • G1(Garbage First) GC

1)  Serial GC 

:  Young ์˜์—ญ์—์„œ์˜ GC๋Š” ์•ž ์ ˆ์—์„œ ์„ค๋ช…ํ•œ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

:  Old ์˜์—ญ์˜ GC๋Š” mark-sweep-compact์ด๋ผ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

:  Desktop CPU ์ฝ”์–ด๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ์„ ๋–„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“  ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋˜๋Š” ๋ฐฉ์‹

 

2)  Parallel GC 

 Throughput GC๋ผ๊ณ ๋„ ๋ถ€๋ฆ…๋‹ˆ๋‹ค.

:   Parallel GC๋Š” Serial GC์™€ ๊ธฐ๋ณธ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ๊ฐ™์Šต๋‹ˆ๋‹ค.

:  ๊ทธ๋Ÿฌ๋‚˜ Serial GC๋Š” GC๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜์ธ ๊ฒƒ์— ๋น„ํ•ด, Parallel GC๋Š” GC๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์“ฐ๋ ˆ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ž…๋‹ˆ๋‹ค.

:  ๋•Œ๋ฌธ์— Serial GC๋ณด๋‹ค ๋น ๋ฅธ๊ฒŒ ๊ฐ์ฒด๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

:  ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ถฉ๋ถ„ํ•˜๊ณ  ์ฝ”์–ด์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์„ ๋•Œ ์œ ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

 

3) Parallel Old GC (Parallel Compacting GC)

:  Parallel GC์™€ ๋น„๊ตํ•˜์—ฌ Old ์˜์—ญ์˜ GC ์•Œ๊ณ ๋ฆฌ์ฆ˜๋งŒ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

:  Mark-Summary-Compaction ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.

:  Summary ๋‹จ๊ณ„๋Š” ์•ž์„œ GC๋ฅผ ์ˆ˜ํ–‰ํ•œ ์˜์—ญ์— ๋Œ€ํ•ด์„œ ๋ณ„๋„๋กœ ์‚ด์•„ ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ์‹๋ณ„ํ•œ๋‹ค๋Š” ์ ์—์„œ Mark-Sweep-Compaction ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ Sweep ๋‹จ๊ณ„์™€ ๋‹ค๋ฅด๋ฉฐ, ์•ฝ๊ฐ„ ๋” ๋ณต์žกํ•œ ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.

 

4) Concurrent Mark & Sweep GC

:  ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์‘๋‹ต์†๋„๊ฐ€ ์ค‘์š”ํ•  ๋•Œ ์ด์šฉํ•˜๋ฉฐ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ง€์—ฐ์‹œ๊ฐ„์„ ๋‚ฎ์ถฅ๋‹ˆ๋‹ค. 

:  ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜, GC thread๊ฐ€ ๋™์‹œ์— ์‹คํ–‰๋˜์–ด stop-the-world ์‹œ๊ฐ„์„ ์ตœ์†Œํ™” ํ•˜๋Š” GC

stop-the-world ์‹œ๊ฐ„์ด ์งง์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋‹จ์ ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

   -  ๋‹ค๋ฅธ GC ๋ฐฉ์‹๋ณด๋‹ค ๋ฉ”๋ชจ๋ฆฌ์™€ CPU๋ฅผ ๋” ๋งŽ์ด ์‚ฌ์šฉ

   -  Compaction ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•˜์ง€ X

:  ๋•Œ๋ฌธ์— ์กฐ๊ฐ๋‚œ ๋ฉ”๋ชจ๋ฆฌ๋“ค์ด ๋งŽ์•„ Compaction ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ์˜คํžˆ๋ ค ๋‹ค๋ฅธ GC์˜ Stop The World๋ณด๋‹ค Stop The World ์‹œ๊ฐ„์ด ๋” ๊ธธ์–ด์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

https://mangkyu.tistory.com/119

* Compaction : ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ๊ณต๊ฐ„ ์‚ฌ์ด์— ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋นˆ ๊ณต๊ฐ„์ด ์—†๋„๋ก ์˜ฎ๊ฒจ์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‹จํŽธํ™”ํ•˜๋Š” ์ž‘์—…

 

5)  G1(Garbage First) GC

:  G1 GC๋Š” ๋ฐ”๋‘‘ํŒ์˜ ๊ฐ ์˜์—ญ์— ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๊ณ  GC๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

:  ํ•ด๋‹น ์˜์—ญ์ด ๊ฝ‰ ์ฐจ๋ฉด ๋‹ค๋ฅธ ์˜์—ญ์—์„œ ๊ฐ์ฒด๋ฅผ ํ• ๋‹นํ•˜๊ณ  GC๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

:  ์ฆ‰, ์ง€๊ธˆ๊นŒ์ง€ ์„ค๋ช…ํ•œ Young์˜ ์„ธ๊ฐ€์ง€ ์˜์—ญ์—์„œ ๋ฐ์ดํ„ฐ๊ฐ€ Old ์˜์—ญ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๋‹จ๊ณ„๊ฐ€ ์‚ฌ๋ผ์ง„ GC ๋ฐฉ์‹์ด๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

:  G1 GC๋Š” ์žฅ๊ธฐ์ ์œผ๋กœ ๋ง๋„ ๋งŽ๊ณ  ํƒˆ๋„ ๋งŽ์€ CMS GC๋ฅผ ๋Œ€์ฒดํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋งŒ๋“ค์–ด ์กŒ์Šต๋‹ˆ๋‹ค.

 

https://d2.naver.com/helloworld/1329

 

 

 

 

ํ•™์Šต์— ๋งŽ์€ ๋„์›€์ด ๋œ ๋งํฌ๋ฅผ  ์ฐธ์กฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ™‚

 

์ฐธ์กฐ ๋ฐ ์ถœ์ฒ˜

Java Garbage Collection Basics

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

Java Garbage Collection

 

'๐ŸฐJAVA > Basic' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[ JAVA ] Reflection  (0) 2022.07.24
[JAVA ] Set Interface  (0) 2022.06.28
[JAVA ] List Interface  (0) 2022.06.20
[JAVA ] Collection  (0) 2022.06.20
[ JAVA ] Optional  (0) 2022.06.15
Comments