[Memo-Unity] 36. GC(Garbage Collection)

์—…๋ฐ์ดํŠธ:

์นดํ…Œ๊ณ ๋ฆฌ:

ํƒœ๊ทธ: ,


Garbage Collection

Garbage Collection

Garbage Collection








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

๋ฏธ์‚ฌ์šฉ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํŒŒ์•…ํ•˜๊ณ  ํ•ด์ œํ•˜๋Š” ํ”„๋กœ์„ธ์Šค
์ฒ˜๋ฆฌํ•  ์ •๋ณด์˜ ๊ณต๊ฐ„์ด ํ•„์š”ํ•˜๋‹ค (๋ฉ”๋ชจ๋ฆฌ)
๋ณ€์ˆ˜๋“ค ํ•จ์ˆ˜๋“ค, ๊ฐ์ฒด๋“ค์ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฐจ์ง€ํ•˜๋Š” ์š”์†Œ
๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์น˜์›Œ์ฃผ์ง€์•Š์œผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(memory leak)๊ฐ€ ์ƒ๊ธด๋‹ค
์ƒˆ๋กœ์šด ์–ธ์–ด๋“ค์—์„œ๋Š” ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๋ฅผ ๋„์ž…

C# ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ

c# ํž™์— ํ• ๋‹นํ•œ ๊ฐ์ฒด๋Š” CLR์ด ์ž๋™์œผ๋กœ ์ˆ˜๊ฑฐ
CLR์€ ๋” ์ด์ƒ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋Š” ์“ฐ๋ ˆ๊ธฐ(Garbage)๋กœ ํŒ๋‹จ
์ด ๋ฉ”๋ชจ๋ฆฌ Garbage๋ฅผ ์ˆ˜๊ฑฐ(Collection)ํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜
EX) ์Šคํƒ์˜์—ญ์˜a๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ํž™์˜ A๊ฐ€ ์žˆ๋‹ค, ์Šคํƒ์˜์—ญ์˜ a๊ฐ€ ์‚ฌ๋ผ์ง€๋ฉด ํž™์˜ A๋Š” ์•ˆ์“ฐ๋Š” ๋ฉ”๋ชจ๋ฆฌ(Garbage)๊ฐ€ ๋œ๋‹ค.

GC ๋ฃจํŠธ

๋ฃจํŠธ : ํž™์— ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ๋ถ™๋“œ๋Š” ์ฐธ์กฐ EX)a ์Šคํƒ๋˜๋Š” ํž™์— ์ƒ์„ฑ
์ปดํŒŒ์ผ๋Ÿฌ๋Š” ๋ฃจํŠธ ๋ชฉ๋ก์„ ์ƒ์„ฑ
CLR์€ ์ด ๋ฃจํŠธ ๋ชฉ๋ก์„ ๊ด€๋ฆฌํ•˜๋ฉฐ ์ƒํƒœ ๊ฐฑ์‹ 
๋ฃจํŠธ๋ชฉ๋ก์€ ๊ฐ€๋น„์ง€์ปฌ๋ ‰ํ„ฐ๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ์ค‘์š” ์ž๋ฃŒ

๊ณผ์ •1
์ดˆ๊ธฐ์— ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ์“ฐ๋ ˆ๊ธฐ๋ผ๊ณ  ๊ฐ€์ •
๋ฃจํŠธ ๋ชฉ๋ก์„ ์ˆœํšŒํ•˜๋ฉฐ ๊ฐ ๋ฃจํŠธ๊ฐ€ ์ฐธ์กฐํ•˜๋Š” ํž™ ๊ฐ์ฒด์™€์˜ ๊ด€๊ณ„ ์กฐ์‚ฌ
๊ด€๊ณ„์—†๋Š” ๋ฃจํŠธ๋Š” ์“ฐ๋ ˆ๊ธฐ, ์ฐธ์กฐํ•˜๋Š” ํž™ ๊ฐ์ฒด๋Š” ์œ ์ง€

๊ณผ์ •1
์ˆ˜๊ฑฐ ํ›„ ๋น„์–ด์žˆ๋Š” ๊ณต๊ฐ„ ์œผ๋กœ ์ธ์ ‘ ๊ฐ์ฒด๋“ค์„ ์ด๋™ํ•ด์„œ ์ •๋ฆฌ
๊ฐ€๋น„์ง€์ปฌ๋ ‰์…˜ ์„ธ๋Œ€ : ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ๊ฒช์€ ํšŸ์ˆ˜
X์„ธ๋Œ€๊ฐ€ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ์ผ์–ด๋‚˜๋ฉด X์ดํ•˜ ์„ธ๋Œ€๊ฐ€ ๋ชจ๋‘ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ์ผ์–ด๋‚œ๋‹ค.

image




์œ ๋‹ˆํ‹ฐ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜

์œ ๋‹ˆํ‹ฐ์—์„œ๋Š” Unity Mono ์—”์ง„๊ณผ ๊ฐ™์€ ๋Ÿฐํƒ€์ž„ ์‹œ์Šคํ…œ์ด ์ž๋™์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.
์œ ๋‹ˆํ‹ฐ๋Š” Boehm-Demers-Weiser ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค. ์•Œ๊ณ ๋ฆฌ์ฆ˜ Mark-Sweep ์„ ์‚ฌ์šฉ
๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ๊ฐ€ ๋ˆˆ์— ๋ณด์ด์ง€๋Š” ์•Š์ง€๋งŒ, ํ•„์š” ์ด์ƒ์œผ๋กœ ์‹คํ–‰๋˜๋„๋ก ๋ง‰๋Š” ๊ฒƒ์ด ํ”„๋กœ๊ทธ๋ž˜๋จธ์˜ ์ค‘์š”ํ•œ ์—ญํ•  ์ค‘ ํ•˜๋‚˜

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

์ž‘์€ ํž™๊ณผ ๋น ๋ฅด๊ณ  ๋นˆ๋ฒˆํ•œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜.(์ฃผ๊ธฐ์ ์œผ๋กœ GC๋ฅผ ํ–‰ํ•˜๋ผ.)

if (Time.frameCount % 30 == 0)
{
   System.GC.Collect();
}

ํฐ ํž™๊ณผ ๋Š๋ฆฌ์ง€๋งŒ ๋œ ๋นˆ๋ฒˆํ•œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜

์ถฉ๋ถ„ํžˆ ํฐ ํž™์„ ํ™•๋ณดํ•˜๋ฉด ๊ฒŒ์ž„ํ”Œ๋ ˆ์ด ์ค‘ ์ผ์‹œ์ •์ง€๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๊นŒ์ง€ ์™„์ „ํžˆ ํž™์ด ์ฐจ๋ฒ„๋ ค์„œ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์ด ์ผ์–ด๋‚˜๋Š” ์ผ์€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ผ์‹œ์ •์ง€๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ช…์‹œ์ ์œผ๋กœ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์„ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์˜ค๋ธŒ์ ํŠธ ํ’€

์˜ค๋ธŒ์ ํŠธ ํ’€์˜ ์‚ฌ์šฉ์€ ์ƒˆ๋กœ ์ƒ์„ฑ๋˜๊ณ  ์ œ๊ฑฐ๋˜๋Š” ์˜ค๋ธŒ์ ํŠธ์˜ ์ˆ˜๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์œผ๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ฐ€๋น„์ง€ ์ƒ์„ฑ์„ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ ๋‹ˆํ‹ฐ ์ž๋™ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ
์œ ๋‹ˆํ‹ฐ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰ํ„ฐ ๊ฐœ์š”







์žก๋‹ด

์œ ๋‹ˆํ‹ฐ ๊ณต์‹ ๋ฌธ์„œ ์ž˜ ์‚ฌ์šฉํ•˜๊ธฐ.




[Unity] UnityDocs TOP


๐Ÿ“”

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ