๐Ÿ”ซGarbage Collection

Brought from this site.

Heap ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ

Unity์—์„œ์˜ Heap ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ์€ 2๊ฐ€์ง€๋กœ ๋‚˜๋ˆ„์–ด์ง

โ–ถ Native Heap : C++๋กœ ์ž‘์„ฑ๋œ ์œ ๋‹ˆํ‹ฐ ์—”์ง„์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋กœ, Texture, Asset, Mesh ์™€ ๊ฐ™์€ ๊ฒƒ์„ ๋‹ด๊ณ  ์žˆ์Œ

+ Unity Engine์—์„œ Scene ์ „ํ™˜์ด ๋ฐœ์ƒํ•  ๋•Œ์— ์œ„์˜ ์š”์†Œ๋“ค์ด ์‚ฌ์šฉ๋˜์ง€ ์•Š์œผ๋ฉด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜๋Š” ๋™์ž‘์„ ํ•จ

+ DontDestroyOnLoad ๋ฅผ ํ†ตํ•ด Scene์ „ํ™˜ ์‹œ์—๋„ ๋‚จ์•„ ์žˆ๋Š” GameObject๋Š” ํ•ด์ œ๋˜์ง€ ์•Š์Œ

( ๋‚จ์•„ ์žˆ๋Š” GameObject์— Script๊ฐ€ ์‚ฌ๋ผ์ง„ Scene์— ์žˆ๋Š” ์–ด์…‹ ( Audio, Texture ๋“ฑ )์„ ์ฐธ์กฐ ํ•˜๊ณ  ์žˆ์„ ๋•Œ์—๋„ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ•ด์ œ ๋˜์ง€ ์•Š์Œ )

โ–ถ Managed Heap : Mono์—์„œ ๊ด€๋ฆฌํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋กœ Script์—์„œ ํ• ๋‹นํ•œ class, string ๊ณผ ๊ฐ™์€ ์š”์†Œ ๋“ค์„ ๋‹ด๊ณ  ์žˆ์Œ

+ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜์€ Managed Heap์—์„œ ์ˆ˜ํ–‰

โ–ฃ GC ( ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜ )์˜ ๋™์ž‘ ์›๋ฆฌ

1. C# ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น

- C#์€ ์„ ํ˜•์ ์ธ Heap ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ์œ„ํ•œ ํฌ์ธํ„ฐ ๋งŒ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ

- ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํ˜„์žฌ ํ•„์š”ํ•œ ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋งŒํผ ์ฆ๊ฐ€์‹œํ‚ค๊ณ  0์„ธ๋Œ€๊ฐ’์œผ๋กœ ์„ค์ •. ํฌ์ธํ„ฐ๋Š” ์ฆ๊ฐ€๋œ ํฌ๊ธฐ๋งŒํผ ์ด๋™ ์‹œํ‚ด

- ํ• ๋‹น์„ ์œ„ํ•œ ์ถฉ๋ถ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ, GC๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ  GC๊ฐ€ ํ˜ธ์ถœ๋จ์—๋„ ์ถฉ๋ถ„ํ•œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ์—๋Š” Heap๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ™•์žฅ ๋จ. ๋Œ€๋ถ€๋ถ„์˜ Unity ํ”Œ๋žจํผ์˜ ๊ฒฝ์šฐ ํž™์˜ ํฌ๊ธฐ๋ฅผ 2๋ฐฐ๋กœ ๋Š˜๋ฆผ

- ๋งŒ์ผ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•ด์ง€๋Š” ๊ฒฝ์šฐ ์•ฑ์ด ๊ฐ•์ œ ์ข…๋ฃŒ ๋จ

2. C# ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ

- GC ๋Š” ์‹œ์Šคํ…œ์˜ ์‹ค์ œ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑ ํ•˜๊ฑฐ๋‚˜, Managed Heap์— ํ• ๋‹น๋œ ๊ฐœ์ฒด์— ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ํ—ˆ์šฉ๋˜๋Š” ์ž„๊ณ„ ๊ฐ’์„ ๋„˜์—ˆ์„ ๋•Œ, GC.Collect ๋ฉ”์„œ๋“œ๊ฐ€ ํ˜ธ์ถœ ๋  ๋•Œ ๋ฐœ์ƒ

- GC๋Š” ํž™ ๋ฉ”๋ชจ๋ฆฌ ์ƒ์—์„œ ์‚ฌ์šฉ ์ค‘์ธ ๊ฐ์ฒด๋“ค์˜ ์ฐธ์กฐ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ์‚ฌ์šฉ ์ค‘์ด์ง€ ์•Š์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•ด์ œํ•˜๊ณ  ์‚ฌ์šฉ ์ค‘์ธ ๋ฉ”๋ชจ๋ฆฌ๋Š” ์žฌ๋ฐฐ์น˜๋ฅผ ํ•˜๊ฒŒ ๋จ

- ์ฐธ์กฐ ๊ทธ๋ž˜ํ”„์˜ Root๋Š” Stack์— ์žˆ๋Š” ๋กœ๋ฒŒ ์ผ ์ˆ˜, ์ •์  ๋นŒ๋“œ, ์ „์—ญ ๋ณ€์ˆ˜ ๋“ฑ์ด ๋˜๊ณ , ํ•˜์œ„๋Š” ๊ฐ์ฒด ๊ฐ„์˜ ์ฐธ์กฐ๊ฐ€ ๋  ์ˆ˜ ์žˆ์Œ

Root๊ฐ€ ์ฐธ์กฐํ•˜๋Š” A,C ๊ทธ๋ฆฌ๊ณ  A๊ฐ€ ์ฐธ์กฐํ•˜๋Š” D๊ฐ€ GC ์ดํ›„์—๋„ ๋‚จ์•„ ์žˆ์Œ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ

- ์„ธ๋Œ€๋ณ„ ๊ฐ€๋น„์ง€ ์ปฌ๋ ‰์…˜

: ์ตœ๊ทผ์— ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๋ถ€ํ„ฐ GC๊ฐ€ ํ•œ๋ฒˆ ๋ถˆ๋ฆด ๋•Œ๋งˆ๋‹ค ์‚ด์•„ ๋‚จ์€ ๋ฉ”๋ชจ๋ฆฌ๊นŒ์ง€ 0 ~ 2 ์„ธ๋Œ€๊นŒ์ง€ ๋ถ„๋ฆฌ

: ์ตœ๊ทผ์— ์ƒ์„ฑ๋  ๊ฐ์ฒด์ผ ์ˆ˜๋ก ๋ฉ”๋ชจ๋ฆฌ ํ•ด์ œ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๊ธฐ ๋•Œ๋ฌธ์— 0 ์„ธ๋Œ€์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ถ€ํ„ฐ ๊ด€๋ฆฌ

: 0์„ธ๋Œ€์˜ GC์—์„œ ๋‚จ์•„ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋Š” 1์„ธ๋Œ€๋กœ ๋ณ€๊ฒฝ ๋จ, 1์„ธ๋Œ€์˜ GC๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ๋‚จ์ด ์žˆ๋Š” 1์„ธ๋Œ€๋Š” 2์„ธ๋Œ€๋กœ ๋ณ€๊ฒฝ ๋จ

: 0 ์„ธ๋Œ€์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ํ›„์—๋„ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋ถ€์กฑํ•ด์ง€๋ฉด 1์„ธ๋Œ€ -> 2์„ธ๋Œ€ ์ˆœ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌ

3. SOH, LOH

- C# ์—์„œ๋Š” 85KB ๋ฅผ ๊ธฐ์ค€์œผ๋กœ SOH( Small Object Heap ), LOH( Large Object Heap )์œผ๋กœ ๋‚˜๋ˆ”

- LOH ๋Š” SOH์™€ ๋‹ฌ๋ฆฌ ํ• ๋‹น๊ณผ ๋™์‹œ์— 2์„ธ๋Œ€๋กœ ์‹œ์ž‘, LOH๋Š” ๋ฉ”๋ชจ๋ฆฌ ์žฌ๋ฐฐ์น˜ ์‹œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์žฌ๋ฐฐ์น˜๋ฅผ ํ•˜์ง€ ์•Š์Œ

# ์ฐธ๊ณ  ์ž๋ฃŒ

Last updated