[C#] CLR: GC์˜ ๊ตฌ์กฐ

[์›๋ณธ ๋งํฌ]

C#์€ Java์˜ ์นดํ”ผ์บฃ์—์„œ ์‹œ์ž‘๋œ ์–ธ์–ด๋‹ค.
๊ทธ๋ž˜์„œ ์ „๋ฐ˜์ ์œผ๋กœ ๋ฒค์น˜๋งˆํ‚นํ•˜๊ฑฐ๋‚˜ ๋‹ฎ์€ ๋ถ€๋ถ„์ด ๋งŽ์€๋ฐ, GC๋„ ์–ด๋А ์ •๋„๋Š” ์ƒํ†ตํ•˜๋Š” ๋ถ€๋ถ„์ด ์žˆ์ง€๋งŒ ๋…์ž์ ์œผ๋กœ ๋ฐœ์ „ํ•œ ๋ถ€๋ถ„๋„ ๋งŽ๋‹ค.

์ผ๋‹จ, C#-CLR์˜ GC๋Š” JVM๊ณผ ๋น„๊ตํ•˜๋ฉด ๋ฐœ์ „ ์†๋„๊ฐ€ ๋”๋”˜ ํŽธ์ด๋‹ค.
ZGC ๊ฐ™์€ ์ดˆ๋Œ€๊ทœ๋ชจ-์ €์ง€์—ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐ™์€ ๊ฒƒ์€ ์•„์ง ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ทธ๋ž˜์„œ ์ˆ˜๋ฐฑGB-TB ์ˆ˜์ค€์˜ ๋ฉ”๋ชจ๋ฆฌ ํ•ธ๋“ค๋ง์—๋Š” ์‹ค์งˆ์ ์ธ ์ œ์•ฝ์ด ์กด์žฌํ•œ๋‹ค.
์• ์ดˆ์— Java ์ˆ˜์ค€์œผ๋กœ ๊ฑฐ๋Œ€ํ•œ ๋ฉ”์ธํ”„๋ ˆ์ž„์— ์‚ฌ์šฉ๋œ ์‚ฌ๋ก€๊ฐ€ ๋งŽ์ง€ ์•Š์•„์„œ ๊ทธ๋Ÿฐ ์š”๊ตฌ์‚ฌํ•ญ์ด ๊ฑฐ์˜ ์—†์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

๊ทธ๋ž˜๋„ ์—ญ์‚ฌ์ ์ธ ํ๋ฆ„์ด๋‚˜ ๊ธฐ๋ณธ ์›๋ฆฌ ๋“ฑ์€ JVM๊ณผ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์ด ๋งŽ์•„์„œ JVM์˜ GC์— ๋Œ€ํ•ด์„œ ๋จผ์ € ์•Œ์•„๋‘๋ฉด ์ข‹๋‹ค.
https://blog.naver.com/sssang97/223575258532

๋‹ท๋„ท CLR์˜ GC๋Š” Java๋‚˜ Go์— ๋น„ํ•˜๋ฉด ์„ธ๋ถ€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ๋Œ€ํ•ด ๊ณต๊ฐœ๋œ ์ •๋ณด๊ฐ€ ๋งŽ์ง€ ์•Š๋‹ค . ๊ณต์‹ ๋ฌธ์„œ์—๋„ ๊ฒ‰ํ•ฅ๊ธฐ์‹์œผ๋กœ ๋Œ€์ถฉ๋งŒ ์จ๋†จ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚ด์šฉ๋„ ์ข€ ๋นˆ์•ฝํ•œ ํŽธ์ด๋‹ค.




์„ธ๋Œ€๋ณ„(Generational) GC

CLR GC ๋˜ํ•œ ์ „ํ†ต์ ์ธ ์ œ์–ธ์— ๋”ฐ๋ผ์„œ ์„ธ๋Œ€๋ณ„ ๊ตฌ์กฐ๋ฅผ ๊ทผ๊ฐ„์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ๋‹ค.

  1. ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ์ฒด๋Š” ๊ธˆ๋ฐฉ ์ฃฝ๊ณ 

  2. ์˜ค๋ž˜ ์ƒ์กดํ•œ ๊ฐ์ฒด์ผ ์ˆ˜๋ก ๋” ์˜ค๋ž˜ ์ƒ์กดํ•œ๋‹ค


๋Š” ๊ฒฝํ—˜์— ๊ทผ๊ฑฐํ•œ ์ด๋ก  ๋ง์ด๋‹ค.

๊ทผ๋ฐ Java๊ฐ€ ์„ธ๋Œ€๋ฅผ "๊ตฌ์„ธ๋Œ€", "์‹ ์„ธ๋Œ€" ๋‘˜๋กœ ๋‚˜๋ˆˆ ๊ฒƒ๊ณผ ๋Œ€์กฐ๋˜๊ฒŒ, CLR์€ ์„ธ๋Œ€๋ฅผ 3๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„ํ–ˆ๋‹ค.

https://failingfast.io/a-super-simplified-explanation-of-net-garbage-collection/
๋ฌผ๋ก  ๋‹จ๊ณ„๋งŒ ํ•˜๋‚˜ ์ถ”๊ฐ€๋œ ๊ฒƒ์ผ๋ฟ, ์„ธ๋Œ€ ์ด๋ก ์˜ ๊ทผ๊ฐ„์—์„œ ๋ฒ—์–ด๋‚˜์ง€๋Š” ์•Š๋Š”๋‹ค.
์ Š์€ ๊ฐ์ฒด๋Š” 0์„ธ๋Œ€์— ํ• ๋‹นํ•˜๊ณ , ์‚ด์•„๋‚จ์œผ๋ฉด 1์„ธ๋Œ€๋กœ ์Šน๊ฒฉํ•˜๊ณ , ์˜ค๋ž˜ ์‚ด์•„๋‚จ์œผ๋ฉด 2์„ธ๋Œ€๋กœ ์Šน๊ฒฉํ•œ๋‹ค.

์˜ˆ์™ธ์ ์œผ๋กœ ๋งค์šฐ ํฐ ๊ฐ์ฒด๋Š” 0์„ธ๋Œ€์— ๋„ฃ์ž ์•Š๊ณ  ๋Œ€ํ˜• ๊ฐ์ฒด ํž™(Large Object Heap:LOH)์ด๋ผ๋Š” ๊ณต๊ฐ„์— ๊ฒฉ๋ฆฌํ•ด์„œ ์ €์žฅํ•œ๋‹ค. ํฐ ๊ฐ์ฒด์˜ ๊ธฐ์ค€์€ 85000๋ฐ”์ดํŠธ๋‹ค.

์•„๋ฌดํŠผ ๊ทธ๋ž˜์„œ ๋นˆ๋ฒˆํ•œ ํ•ด์ œ์— ๋”ฐ๋ฅธ GC๋Š” ๋ณดํ†ต 0์„ธ๋Œ€์—์„œ๋งŒ ์ด๋ฃจ์–ด์ง„๋‹ค.
๋‹ค๋งŒ 1์„ธ๋Œ€๋‚˜ 2์„ธ๋Œ€ ๋ฉ”๋ชจ๋ฆฌ์— GC๊ฐ€ ํŠธ๋ฆฌ๊ฑฐ๋˜๋ฉด, ๊ทธ ํ•˜์œ„ ์„ธ๋Œ€์— ๋Œ€ํ•œ GC๋„ ํ•จ๊ป˜ ์ฒ˜๋ฆฌ๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด 2์„ธ๋Œ€ GC๊ฐ€ ์ˆ˜ํ–‰๋˜๋ฉด 0,1์„ธ๋Œ€ GC๋„ ํ•จ๊ป˜ ๋ฌถ์–ด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.




๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ

Java์˜ ๊ฒฝ์šฐ์—๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์• ์ดˆ๋ถ€ํ„ฐ ์ชผ๊ฐœ์„œ ์‹ ์„ธ๋Œ€/๊ตฌ์„ธ๋Œ€๋ฅผ ๋‹ค๋ฅธ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ์— ์ €์žฅํ–ˆ์—ˆ๋‹ค. (G1GC ์ด์ „)

๋‹ท๋„ท์€ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ ์ž์ฒด๋Š” ๊ทธ๊ฒƒ๊ณผ ๋น„๊ตํ•˜๋ฉด ๋‹จ์ˆœํ•˜๋‹ค. ๊ทธ๋ƒฅ Managed Heap์ด๋ผ๊ณ  ํ•ด์„œ ๊ฑฐ๋Œ€ํ•œ ๋ฉ”๋ชจ๋ฆฌ ์‹œํ€€์Šค๋ฅผ ํ•˜๋‚˜ ๋‘๊ณ , ๋ฉ”๋ชจ๋ฆฌ ํ’€ ๊ฐœ๋…์œผ๋กœ ๊ฐ–๋‹ค์“ฐ๋Š” ํ˜•ํƒœ๋‹ค.

https://www.microsoftpressstore.com/articles/article.aspx?p=2224054
์ € ํž™์—๋Š” 0-2์„ธ๋Œ€์˜ ๊ฐ์ฒด๋“ค์ด ๋ชจ๋‘ ์„ž์—ฌ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

๋‹ค๋งŒ, ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋˜ ๋Œ€ํ˜• ๊ฐ์ฒด ํž™(LOH)์˜ ๊ฒฝ์šฐ์—๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด ๋”ฐ๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.
๋„ˆ๋ฌด ํฌ๋ฉด ๊ณต๊ฐ„ ๊ด€๋ฆฌ๊ฐ€ ์ œ๋Œ€๋กœ ๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— 85000๋ฐ”์ดํŠธ๊ฐ€ ๋„˜๋Š” ๋Œ€ํ˜• ๊ฐ์ฒด๋Š” ์„ธ๋Œ€๋ฅผ ๋”ฐ์ง€์ง€ ์•Š๊ณ  ๊ณง๋ฐ”๋กœ LOH์— ๋”ฐ๋กœ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  LOH์™€ ๋Œ€๋น„ํ•ด์„œ ๊ธฐ์กด์˜ 0-2์„ธ๋Œ€๊ฐ€ ๋ชจ์—ฌ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์„ ์†Œํ˜• ๊ฐ์ฒด ํž™(Small Object Heap:SOH)์ด๋ผ๊ณ  ํ•œ๋‹ค.

https://failingfast.io/a-super-simplified-explanation-of-net-garbage-collection/
์ด๋Ÿฐ ๋ชจ์–‘์ƒˆ๋‹ค.




Mark and Swap

ํ˜„๋Œ€ GC์˜ ๊ทผ๊ฐ„์ด ๋œ ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜๋‹ค.
1960๋…„์— ๋ฆฌ์Šต์˜ ์ฐฝ์‹œ์ž ๋งค์นด์‹œ๊ฐ€ ๋งŒ๋“ค์—ˆ๋‹ค.

https://m.blog.naver.com/sssang97/221567636644
Java์—์„œ๋„ ๋ช‡๋ช‡ GC ๊ธฐ๋ฒ•์€ ๋งˆํฌ์•ค ์Šค์œ• ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค์–ด์กŒ์œผ๋‚˜ ํ‡ด์ถœ๋œ ๋ชจ์–‘์ƒˆ๊ณ , C#์€ ์ง€๊ธˆ๋„ ์ด๊ฑธ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ GC ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค.

๋ฃจํŠธ๊ฐ์ฒด๋“ค๋ถ€ํ„ฐ ํ•œ๋ฐ”ํ€ด ๋บ‘ ๋Œ๋ฉด์„œ ์ฐธ์กฐ๋˜๊ณ  ์žˆ๋Š”์ง€๋ฅผ ์ฒดํฌํ•˜๊ณ , ์ฐธ์กฐ๋˜์ง€ ์•Š์€๊ฑธ ์‹น ์ง€์›Œ๋ฒ„๋ฆฐ๋‹ค๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์ด๋‹ค.

๋งค GC ํƒ€์ž„๋งˆ๋‹ค ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ํ’€์Šค์บ”ํ•˜๋ฉด์„œ ์ฐ๊ณ , ๋˜ ํ’€์Šค์บ”ํ•˜๋ฉด์„œ ์ง€์›Œ์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์ปค์ง€๋ฉด ๊ฐ๋‹น์ด ์ž˜ ์•ˆ๋œ๋‹ค๋Š”๊ฒŒ ๋‹จ์ ์ด๋‹ค.

๊ฒŒ๋‹ค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ํŒŒํŽธํ™”๋„ ์‹ฌํ•˜๋‹ค. ๊ทธ๋ƒฅ ์ผ๋‹จ ์ง€์šฐ๊ณ  ๋ณด๋Š”๊ฒŒ ์ตœ์ข… ๋ชฉ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ํŒŒํŽธํ™”๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค๋ฉด ์กฐ๊ฐ๋ชจ์Œ์„ ๋˜ ์ถ”๊ฐ€๋กœ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ ํŒŒํŽธํ™”๊ฐ€ ๋ˆ„์ ๋ ์ˆ˜๋ก ์—ฐ์†๋œ ํฐ ๊ณต๊ฐ„์ด ์—†์–ด์ ธ์„œ ๋นˆ ๊ณต๊ฐ„์„ ์ฐพ๊ธฐ๋„ ํž˜๋“ค๊ณ , ์ถ”๊ฐ€์ ์ธ ์ •๋ฆฌ์ž‘์—…์ด ํ•„์š”ํ•ด์งˆ ์ˆ˜๋„ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.




Memory Compact

๋ฐ”๋กœ ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด, GC ๊ณผ์ •์—์„œ ์“ฐ๋ ˆ๊ธฐ๋ฅผ ํ•œ๋ฒˆ์— ๋ชจ์•„์„œ ์ •๋ฆฌํ•˜๋‹ค๋ณด๋ฉด ๊ณจ๋‹ค๊ณต์ฆ ๊ฑธ๋ฆฐ ๊ฒƒ์ฒ˜๋Ÿผ ๊ตฌ๋ฉ์ด ์ˆญ์ˆญ ๋šซ๋ฆด ์ˆ˜๊ฐ€ ์žˆ๋‹ค.
๊ทธ๋Ÿฌ๋‹ค๋ณด๋ฉด ๋ฉ”๋ชจ๋ฆฌ ํŒŒํŽธํ™”๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ , ํšจ์œจ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น ์˜์—ญ์„ ์žก๊ธฐ๊ฐ€ ์• ๋งคํ•ด์„œ ์žฅ๊ธฐ์ ์œผ๋กœ ํ• ๋‹น์— ๋Œ€ํ•œ ๋น„ํšจ์œจ์„ฑ์ด ์ฆ๋Œ€ํ•˜๊ฒŒ ๋œ๋‹ค.

๊ทธ๋ž˜์„œ CLR๋„ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์ปดํŒฉ์…˜์„ ํ†ตํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์˜ˆ์˜๊ฒŒ ๋ชจ์œผ๋Š” ์ž‘์—…์„ ํ•œ๋‹ค. ๋ณดํ†ต ์ •๋ฆฌ์ž‘์—…(Sweep)๊ณผ ๋™์‹œ์— ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค.

๋‹จ, LOH์˜ ๊ฒฝ์šฐ์—๋Š” ์˜ˆ์™ธ๋‹ค. ์ด๋™ ๋น„์šฉ์ด ๋„ˆ๋ฌด ํฌ๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ƒฅ ์ ๋‹นํžˆ ๋น„์›Œ๋‘” ์ฑ„๋กœ ์žฌ์‚ฌ์šฉ๋งŒ ํ•œ๋‹ค. ๋ฌผ๋ก  ์ถ”๊ฐ€ ์˜ต์…˜์„ ์ฃผ๋ฉด LOH๋„ ์ปดํŒฉ์…˜์„ ์‹œํ‚ฌ ์ˆ˜๋„ ์žˆ๋‹ค.




Stop The World

CLR GC์—๋„ ๋ชจ๋“  GC์— ์กด์žฌํ•˜๋Š” ์ˆ™๋ช…, ์ •์ง€์‹œ๊ฐ„์ด ์กด์žฌํ•œ๋‹ค.
ํ†ต์ƒ์ ์œผ๋กœ 5~15ms ์ •๋„์˜ ์ •์ง€๊ฐ€ ๋ฐœ์ƒํ•˜๋‚˜, ๋ฉ”๋ชจ๋ฆฌ ์••๋ ฅ์ด ๊ทน๋‹จ์ ์ด๋ฉด ํ›จ์”ฌ ๋” ๊ธธ์–ด์งˆ ์ˆ˜๋„ ์žˆ๋‹ค.
๋ฉ”๋ชจ๋ฆฌ ์••๋ ฅ ํŒจํ„ด์— ๋”ฐ๋ผ์„œ ์ดˆ ๋‹จ์œ„๋กœ ๊ฐˆ ์ˆ˜๋„ ์žˆ๋‹ค.

CLR GC์—๋Š” ์•„์ง ์ €์ง€์—ฐ์„ ๋ณด์žฅํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ํฌํ•จ๋˜์–ด์žˆ์ง€ ์•Š๋‹ค.




GC ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ข…๋ฅ˜

CLR๋„ ์ž๋ฐ”์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์›ํ•˜๋Š” GC ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค.
๋ฌผ๋ก  ์ž๋ฐ”์— ๋น„ํ•˜๋ฉด ์„ ํƒ์ง€๊ฐ€ ์ ์€ ํŽธ์ด๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด๋ฆ„์„ ์ง„์งœ ์žฌ๋ฏธ์—†๊ฒŒ ์ง“๋Š”๋‹ค. ์ € ์ด๋ฆ„๋“ค์„ ๋ด๋ผ. ๊ฐœ์„ฑ์ด ๋А๊ปด์ง€๋Š”๊ฐ€?

1. Concurrent GC (๋ ˆ๊ฑฐ์‹œ)
.NET Framework 4๋ถ€ํ„ฐ ๋Œ€์ฒด์žฌ์ธ background GC๊ฐ€ ๋‚˜์˜ค๊ณ  ํ๊ธฐ๋จ

**2. Workstation GC **
๊ธฐ๋ณธ๊ฐ’. ํด๋ผ์ด์–ธํŠธ ์•ฑ ์ „์šฉ.

**3. Server GC **
์„œ๋ฒ„ ์ „์šฉ.

4. Background GC (Workstation, Server)
.NET Framework 4๋ถ€ํ„ฐ ํฌํ•จ




CLR: Workstation GC

CLR์—์„œ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์ œ๊ณตํ•˜๋Š” GC ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ถ€๋ฅด๋Š” ๋ช…์นญ์ด๋‹ค.

์ผ๋ฐ˜์ ์ธ GUI ํด๋ผ์ด์–ธํŠธ ํ”„๋กœ๊ทธ๋žจ ๋“ฑ์— ์ ํ•ฉํ•œ GC ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. GC๋ฅผ ์œ„ํ•œ ์ „์šฉ ์Šค๋ ˆ๋“œ๊ฐ€ ๋”ฐ๋กœ ๋œจ์ง€ ์•Š๊ณ  ์œ ์ €์Šค๋ ˆ๋“œ ์ค‘๊ฐ„์ค‘๊ฐ„์— ๋ผ์–ด์„œ ํ˜ธ์ถœ๋œ๋‹ค.

๊ทธ๋ž˜์„œ ์‚ฌ์‹ค Mark and Sweep๊ณผ ํฌ๊ฒŒ ๋‹ค๋ฅด์ง€ ์•Š๋‹ค.
GC๊ฐ€ ๋Œ๋ฉด ๊ทธ๋Œ€๋กœ Stop The World๋‹ค. ๋ชจ๋“ ๊ฑธ ๋ฉˆ์ถ˜๋‹ค.

https://learn.microsoft.com/en-us/dotnet/standard/garbage-collection/workstation-server-gc
๋น ๋ฅธ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ํ™˜๊ฒฝ์—์„œ๋Š” ์ ์ ˆ์น˜ ์•Š๊ณ , ๊ฐ€๋‚œํ•œ ํ™˜๊ฒฝ์—์„œ ์“ฐ๊ฑฐ๋‚˜ ๊ทธ๋ƒฅ ๋ฆฌ์†Œ์Šค๋ฅผ ์ ๊ฒŒ ๋จน๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.




CLR: Server GC

๊ณ ์„ฑ๋Šฅ ์„œ๋ฒ„์šฉ์œผ๋กœ ์ œ๊ณต๋˜๋Š” GC ์˜ต์…˜์ด๋‹ค.
์ด๋ฆ„๋Œ€๋กœ ๊ทธ๋ƒฅ ์„œ๋ฒ„ ๋„์šธ๊ฑฐ๋ฉด ์ด๊ฒŒ ๊ฐ€์žฅ ์ ์ ˆํ•˜๋‹ค.

Workstation GC๊ฐ€ ์ถ”๊ฐ€ ์Šค๋ ˆ๋“œ ์—†์ด ๋‹จ์ผ์Šค๋ ˆ๋“œ๋กœ ๋™์ž‘ํ•œ ๊ฒƒ๊ณผ ๋‹ค๋ฅด๊ฒŒ, ์ด๊ฑด GC๋งŒ์„ ์œ„ํ•œ GC ์Šค๋ ˆ๋“œ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋„์šด๋‹ค.

.png?type=w800) https://kimjaehak.github.io/c%23/C-performance-gc/
๊ทผ๋ฐ ๊ทธ๋ ‡๋‹ค๊ณ  ํ•ด์„œ ์ •์ง€์‹œ๊ฐ„์ด ์—†๋Š”๊ฑด ์•„๋‹ˆ๋‹ค. GC ์Šค๋ ˆ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ๋œจ๊ธด ํ•˜๋Š”๋ฐ, GC๊ฐ€ ์ „๋ถ€ ๋๋‚˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๋ชจ๋“ ๊ฒŒ ๋ฉˆ์ถ”๋Š”๊ฑด ๋˜‘๊ฐ™๋‹ค.
๊ทธ๋ž˜์„œ ๋‚ฎ์€ ์ง€์—ฐ์‹œ๊ฐ„์„ ๋ณด์žฅํ•˜์ง€๋Š” ๋ชปํ•œ๋‹ค.




CLR: Background GC

์œ„์—์„œ ์„ค๋ช…ํ–ˆ๋˜ Workstation๊ณผ Server GC๋Š” ์šฉ๋„๋Š” ๋‹ค๋ฅด์ง€๋งŒ, GC๋ฅผ ๋•Œ๋ฆด๋•Œ ๋ชจ๋“ ๊ฑธ ๋ฉˆ์ถ˜๋‹ค๋Š” ๋‹จ์ ์€ ๋™์ผํ–ˆ๋‹ค. ๊ทธ๊ฑธ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋‚˜์˜จ ๋ณด์™„์  GC ์˜ต์…˜์ด๋‹ค.

์ด๊ฑด 2์„ธ๋Œ€ GC์— ํ•œํ•ด์„œ ๋™์‹œ์  GC๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ๊ทธ๋ž˜์„œ 2์„ธ๋Œ€ GC๊ฐ€ ์‚ฌ์šฉ์ž ์Šค๋ ˆ๋“œ๋ฅผ ๋ฉˆ์ถ”์ง€๋Š” ์•Š๋Š”๋‹ค.
๋Œ€์‹  0-1์„ธ๋Œ€ GC๋Š” ๋™์‹œ์ ์œผ๋กœ ์‹คํ–‰ํ•˜์ง€ ์•Š๋Š”๋‹ค. 0-1์„ธ๋Œ€ GC๋Š” ์—ฌ์ „ํžˆ ์ „์ฒด ํ”„๋กœ๊ทธ๋žจ์„ ๋ฉˆ์ถ˜๋‹ค. 0-1์„ธ๋Œ€ GC๋Š” ๋น„๊ต์  ์‹คํ–‰์‹œ๊ฐ„์ด ์งง์•„์„œ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค๊ณ ๋Š” ํ•˜์ง€๋งŒ, ์•„๋ฌดํŠผ ์—ฌ์ „ํžˆ ๋ฉˆ์ถ”๋Š”๊ฑด ๋งž๋‹ค.

์ด๊ฑด Server์— ๋Œ€ํ•ด์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ , Workstation์— ๋Œ€ํ•ด์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
๊ฐ๊ฐ Background Server GC, Background Workstation GC๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค.

Server GC๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ Background Server GC๊ฐ€ ์‹คํ–‰๋œ๋‹ค.

Background Workstation GC์˜ ๊ฒฝ์šฐ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋™์ž‘ํ•œ๋‹ค.

ํ•˜๋‚˜์˜ GC ์Šค๋ ˆ๋“œ๋งŒ์„ ์ถ”๊ฐ€๋กœ ๋„์šฐ๊ณ , ์ค‘๊ฐ„ 0-1์„ธ๋Œ€ GC๋‚˜ ์‚ฌ์ด์‚ฌ์ด ์Šคํ…์— ๋Œ€ํ•ด์„œ๋Š” ์ผ์‹œ์ค‘์ง€๊ฐ€ ๋ฐœ์ƒํ•˜์ง€๋งŒ, ์ผ์‹œ์ค‘์ง€๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š๊ณ  ๋™์‹œ์ ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋Š” ๊ตฌ๊ฐ„๋„ ์žˆ๋‹ค.

Background Server GC๋Š” ๋ฐ˜๋Œ€๋กœ GC ์Šค๋ ˆ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ๋œจ๋ฉด์„œ, 2์„ธ๋Œ€ GC๋ฅผ ๋™์‹œ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์ด๊ฒƒ๋„ ๋น„์Šทํ•˜๋‹ค.
๋‹ค๋งŒ ์ผ๋ฐ˜ GC ์Šค๋ ˆ๋“œ์™€ Background๋งŒ์„ ์œ„ํ•œ Background GC ์Šค๋ ˆ๋“œ๊ฐ€ ์ถ”๊ฐ€๋กœ ๋œฌ๋‹ค๋Š”๊ฒŒ ๋‹ค๋ฅด๋‹ค.
์ผ๋ฐ˜ GC๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ชจ๋“  ํ”„๋กœ๊ทธ๋žจ์„ ์ฐจ๋‹จํ•˜๋Š” Foreground GC๋ฅผ ๋•Œ๋ฆฌ๋Š” ๊ทธ๊ฒƒ์ด๊ณ , Background GC๊ฐ€ ๋ถ€๋ถ„์ ์œผ๋กœ๋งŒ ์ •์ง€๋ฅผ ๋•Œ๋ฆฌ๋Š” ๊ฒƒ์ด๋‹ค.



https://learn.microsoft.com/ko-kr/dotnet/standard/garbage-collection/fundamentals
https://stackoverflow.com/questions/492703/net-vs-java-garbage-collector
https://failingfast.io/a-super-simplified-explanation-of-net-garbage-collection/
https://stackoverflow.com/questions/64252590/how-does-clr-gc-compare-to-latest-zgc-and-shenandoah-gc-on-jvm
https://learn.microsoft.com/en-us/dotnet/standard/garbage-collection/workstation-server-gc