๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์ž๋ฐ”

Garbage Collection in Java

by moon101 2022. 10. 28.

 

๊ฐ€๋น„์ง€ ์ฝœ๋ ‰์…˜์ด๋ž€?

ํž™์— ์žˆ๋Š” ์•ˆ ์“ฐ๋Š” ๊ฐ์ฒด๋“ค์„ ์ž๋ฐ”๊ฐ€ ์•Œ์•„์„œ ์ฒญ์†Œํ•ด ์ฃผ๋Š” ๊ฒƒ์ด๋ผ๊ณ  ์•Œ๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ๊ฒ€์ƒ‰์„ ํ•ด๋ณด๋‹ˆ...... ์ด๋ ‡๊ฒŒ ์‰ฝ๊ฒŒ ๋๋‚ผ ์ˆ˜ ์žˆ๋Š” GC๊ฐ€ ์•„๋‹ˆ์—ˆ๋‹ค..๐Ÿ˜ฅ

 

Garbage Collection์ด๋ž€?

๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์€ ์ฐธ์กฐ(reference)๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋“ค์„ ์ •๋ฆฌํ•ด ์ค˜์„œ RAM์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ™•๋ณดํ•œ๋‹ค. ์ •ํ™•ํžˆ๋Š” Heap ์˜์—ญ์ธ๋ฐ, ๋ชจ๋“  ๊ฐ์ฒด๋Š” Heap์— ์ƒ์„ฑ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 

 

์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ํŠœ๋‹ํ•  ๋•Œ ๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ์œผ๋กœ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ ์ฒซ ๋ฒˆ์งธ๋กœ๋Š” Responsiveness, ๋‘ ๋ฒˆ์งธ๋Š” Throughput์ด๋‹ค. ์„ค๋ช…์„ ํ•˜์ž๋ฉด, Responsiveness๋Š” ์–ผ๋งˆ๋‚˜ ๋น ๋ฅธ ์‹œ๊ฐ„ ์•ˆ์— ์š”์ฒญํ•œ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‘๋‹ตํ•˜๋Š”๊ฐ€์ด๊ณ  Throughput์€ ์ฃผ์–ด์ง„ ์‹œ๊ฐ„ ๋‚ด์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์–‘์— ์ดˆ์ ์„ ๋งž์ถ”๊ณ  ์žˆ์–ด ๋น ๋ฅธ ์‘๋‹ต ์‹œ๊ฐ„์€ ์ค‘์š” ๊ณ ๋ ค ๋Œ€์ƒ์ด ์•„๋‹ˆ๋‹ค.  

 

๊ฐ€๋น„์ง€ ์ฝœ๋ ‰ํ„ฐ์˜ ๊ธฐ๋ณธ ๋™์ž‘๋ฐฉ์‹

1. Marking : ๊ฐ€๋น„์ง€ ์ฝœ๋ ‰ํ„ฐ๊ฐ€ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ์™€ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ตฌ๋ถ„ํ•˜๋Š” ๋‹จ๊ณ„ (์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋จ)

 

2. Normal Deletion : ๋ฏธ์ฐธ์กฐ ๊ฐ์ฒด ์‚ญ์ œ

3. Deletion with Compacting : Normal Deletion์—์„œ ์„ฑ๋Šฅ์„ ์ข€ ๋” ๊ฐœ์„ ํ•œ ๊ฒƒ์œผ๋กœ ์•„์ง ์‚ด์•„์žˆ๋Š” ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ํ•œ ๊ณณ์œผ๋กœ(๋นˆ ๊ณต๊ฐ„์ด ์—†๋„๋ก) ๋ชจ์€๋‹ค. ์ด ๊ฒฝ์šฐ, ์ƒˆ๋กœ์šด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์ด ๋…ธ๋ฉ€๋ณด๋‹ค ํ›จ์”ฌ ๋” ์‰ฝ๊ณ  ๋น ๋ฅด๋‹ค. 

 

์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„ Marking์—์„œ ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ๋‹ค ํ™•์ธํ•˜๋Š” ๊ฒƒ์€ ์‹œ๊ฐ„์ด ๋งŽ์ด ์†Œ์š”๋˜๋ฉฐ ๋น„ํšจ์œจ์ ์ด๋‹ค. ์ด๋ฅผ ๊ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด JVM์€ ๋Œ€๋‹ค์ˆ˜์˜ ๊ฐ์ฒด์˜ ์ˆ˜๋ช…์€ ์งง๋‹ค๋Š” ์‚ฌ์‹ค์— ๊ทผ๊ฑฐํ•˜์—ฌ ํž™์˜ ๊ตฌ์กฐ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜๋ˆ„์—ˆ๋‹ค. 

Young Generation : ์ƒˆ๋กœ์šด ๊ฐ์ฒด๊ฐ€ ์ €์žฅ๋จ. ๊ณต๊ฐ„์ด ๋‹ค ์ฐจ๋ฉด minor gc ๋ฐœ์ƒ

Stop the World Event : minor gc๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋ฉˆ์ถค. -> ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง

Old Generation : ์˜ค๋ž˜๋œ ๊ฐ์ฒด ์ €์žฅ. -> ๊ณต๊ฐ„์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ major gc ๋ฐœ์ƒ

Permanent Generation : JVM์ด ํ•„์š”ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ์ €์žฅ 

- JDK 8๋ถ€ํ„ฐ๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋ฅผ Metaspace์— ์ €์žฅํ•จ

 

 

The Generational Garbage Collection Process

  1. ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋Š” ์—๋ด ์˜์—ญ์— ์ €์žฅ๋จ
  2. ์—๋ด ์˜์—ญ์ด ๋‹ค ์ฐจ๋ฉด minor gc ๋ฐœ์ƒ
  3. ์ฐธ์กฐ ์ค‘์ธ ๊ฐ์ฒด๋Š” S0๋กœ ์ด๋™, ์ฐธ์กฐ๊ฐ€ ์—†๋Š” ๊ฐ์ฒด๋Š” ์‚ญ์ œ๋จ
  4. ๋‹ค์Œ minor gc์—์„œ๋Š” ์—๋ด์—์„œ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด๋“ค์ด S1๋กœ ์ด๋™. S0์— ์žˆ๋˜ ์ฐธ์กฐ ์ค‘์ธ ๊ฐ์ฒด๋“ค์€ ๋‚˜์ด๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ณ  S1๋กœ ์ด๋™. ์‚ด์•„๋‚จ์€ ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ S1๋กœ ์ด๋™ํ•˜๋ฉด ์—๋ด๊ณผ S0 ์‚ญ์ œ
  5. 1~4๋ฅผ ๋ฐ˜๋ณตํ•˜๋‹ค๊ฐ€ ๊ฐ์ฒด์˜ ๋‚˜์ด๊ฐ€ ํŠน์ • threshold์— ๋„๋‹ฌํ•˜๋ฉด young generation์—์„œ old generation์œผ๋กœ ์ด๋™

 

GC ์ข…๋ฅ˜

The Serial GC : CPU ์ฝ”์–ด๊ฐ€ ํ•˜๋‚˜๋งŒ ์žˆ์„ ๋•Œ ์‚ฌ์šฉ 

The Parallel GC : young generation gc๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ€ํ‹ฐํ”Œ ์“ฐ๋ ˆ๋“œ ์‚ฌ์šฉ 

G1 GC : 2์ฐจ์› ํ˜•ํƒœ๋กœ ์ผ์ • ํฌ๊ธฐ์˜ region์œผ๋กœ ๊ตฌ๋ถ„

 

 

// TODO

Heapdump

Scouter (APM)

 

 

 

 

 

 

 

์ฐธ๊ณ ์ž๋ฃŒ

https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

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

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

https://www.youtube.com/watch?v=v1gb397uFC4&t=4s 

w3schools java thread

๋Œ“๊ธ€