[TIL ํ”„๋กœ์ ํŠธ] 8์ผ์ฐจ - Garbage Collection (GC)์™€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ

2025. 4. 11. 17:41ยท๊ณต๋ถ€
728x90

1. Garbage Collection(GC)์ด๋ž€?

GC๋Š” ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ํšŒ์ˆ˜ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ
C#, Java ๊ฐ™์€ ๊ด€๋ฆฌํ˜• ์–ธ์–ด ์—์„œ ์ œ๊ณต๋จ

๊ธฐ๋ณธ ๊ฐœ๋…
- ํž™(Heap) ์˜์—ญ์— ํ• ๋‹น๋œ ๊ฐ์ฒด ์ค‘ ๋” ์ด์ƒ ์ฐธ์กฐ๋˜์ง€ ์•Š๋Š” ๊ฐ์ฒด๋ฅผ ์ฐพ์•„์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšŒ์ˆ˜ํ•จ
- ์ˆ˜๋™ ํ•ด์ œ๊ฐ€ ํ•„์š” ์—†๋Š” ๋Œ€์‹ , GC ํƒ€์ด๋ฐ์— ๋”ฐ๋ผ ์„ฑ๋Šฅ ์ €ํ•˜ ๋ฐœ์ƒ ๊ฐ€๋Šฅ

2. GC ๋™์ž‘ ๋ฐฉ์‹ (C# ๊ธฐ์ค€)

Mark and Sweep ๋ฐฉ์‹
1. Mark : ๋ฃจํŠธ(Root) ๊ฐ์ฒด์—์„œ ์‹œ์ž‘ํ•ด ์ฐธ์กฐ ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋ฅผ ๋ชจ๋‘ โ€œ์‚ด์•„์žˆ๋‹คโ€๊ณ  ํ‘œ์‹œ
2. Sweep : ํ‘œ์‹œ๋˜์ง€ ์•Š์€ ๊ฐ์ฒด๋Š” ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ œ๊ฑฐ

์„ธ๋Œ€๋ณ„ ๊ด€๋ฆฌ(Generational GC)
- Generation 0 : ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ๊ฐ์ฒด (๋น ๋ฅด๊ฒŒ ์ˆ˜๊ฑฐ)
- Generation 1 : ์กฐ๊ธˆ ์˜ค๋ž˜๋œ ๊ฐ์ฒด
- Generation 2 : ์˜ค๋ž˜ ์‚ด์•„๋‚จ์€ ๊ฐ์ฒด (GC ๋Œ€์ƒ์—์„œ ์ œ์™ธ๋˜๊ธฐ ์‰ฌ์›€)
-> ๋Œ€๋ถ€๋ถ„์˜ GC๋Š” Gen 0 ๋Œ€์ƒ์ด ๋งŽ๊ณ , Gen 2๋Š” ์ž˜ ์•ˆ ์ง€์›Œ์ง

GC Alloc

๋งค ํ”„๋ ˆ์ž„๋งˆ๋‹ค ํž™ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ, GC๊ฐ€ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋ฉด์„œ ์„ฑ๋Šฅ ์ €ํ•˜ ์œ ๋ฐœ
GC๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ˆœ๊ฐ„ Stop-the-world(์ž ๊น์˜ ๋ฉˆ์ถค)์ด ๋ฐœ์ƒ


GC ๋ฐœ์ƒ ์˜ˆ์‹œ

void Update() {
    string msg = "Score: " + score; // ๋งค ํ”„๋ ˆ์ž„๋งˆ๋‹ค ์ƒˆ string ์ƒ์„ฑ โ†’ GC Alloc
}


Unity์—์„œ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” GC ์›์ธ

1. string ์—ฐ๊ฒฐ : ๋ฌธ์ž์—ด์€ ๋ถˆ๋ณ€(immutable) ๊ฐ์ฒด๋ผ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์ง
2. List<T>.Add() : ๋‚ด๋ถ€ ๋ฐฐ์—ด์ด ๋„˜์น˜๋ฉด ์ƒˆ๋กœ์šด ๋ฐฐ์—ด ์ƒ์„ฑ
3. foreach : IEnumerator ๋ฐ•์‹ฑ ๋ฐœ์ƒ ๊ฐ€๋Šฅ
4. LINQ ์‚ฌ์šฉ : ๋ฌด์กฐ๊ฑด ํž™ ํ• ๋‹น ๋ฐœ์ƒ
5. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์— ๋žŒ๋‹ค ๋“ฑ๋ก ํ›„ ํ•ด์ œ ์•ˆํ•จ : ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ์œ„ํ—˜

4. GC ์ตœ์†Œํ™” ์ „๋žต

(1) ๊ฐ์ฒด ํ’€๋ง (Object Pooling)

- ์ž์ฃผ ์ƒ์„ฑ/์ œ๊ฑฐ๋˜๋Š” ๊ฐ์ฒด๋Š” ํ’€๋กœ ๊ด€๋ฆฌ
- ์˜ˆ : ์ด์•Œ, ์ดํŽ™ํŠธ, UI ํ† ์ŠคํŠธ ๋“ฑ
Unity์—์„œ๋Š” UnityEngine.Pool.ObjectPool<T> ์‚ฌ์šฉ ๊ฐ€๋Šฅ

(2) ๊ตฌ์กฐ์ฒด ์‚ฌ์šฉ ๋ฐ ๊ฐ’ ํƒ€์ž… ํ™œ์šฉ

- ํด๋ž˜์Šค ๋Œ€์‹  struct ์‚ฌ์šฉ (ํž™ ํ• ๋‹น ํ”ผํ•จ)
- ๋‹จ, ๊ตฌ์กฐ์ฒด๋Š” ๋ณต์‚ฌ ๋น„์šฉ ์žˆ์œผ๋‹ˆ ์‹ ์ค‘ํ•˜๊ฒŒ ์‚ฌ์šฉ

(3) StringBuilder ํ™œ์šฉ


(4) NativeArray, Job System ์‚ฌ์šฉ

- Unity DOTS ํ™˜๊ฒฝ์—์„œ๋Š” GC ์—†๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
- NativeArray, NativeList ๋“ฑ์€ GC ๋ฐœ์ƒ ์—†์ด ์ž‘์—… ๊ฐ€๋Šฅ

5. Unity์—์„œ GC ๋ชจ๋‹ˆํ„ฐ๋ง ํŒ

- Profiler -> Memory -> GC Alloc ํ™•์ธ
- Deep Profiling ์„ ์ผœ๋ฉด ์–ด๋–ค ์ฝ”๋“œ์—์„œ GC๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์ถ”์  ๊ฐ€๋Šฅ
- Profiler.BeginSample("Tag")์œผ๋กœ ์ˆ˜๋™ ํƒœ๊น… ๊ฐ€๋Šฅ




๋ฐ˜์‘ํ˜•

'๊ณต๋ถ€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[TIL ํ”„๋กœ์ ํŠธ] 7์ผ์ฐจ - CPU ์บ์‹œ ํžˆํŠธ์™€ ์บ์‹œ ๋ฏธ์Šค  (0) 2025.04.10
[TIL ํ”„๋กœ์ ํŠธ] 6์ผ์ฐจ - ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ & ์บ์‹œ ์ผ๊ด€์„ฑ (Memory Model & Cache Coherency)  (0) 2025.04.09
[TIL ํ”„๋กœ์ ํŠธ] 5์ผ์ฐจ - ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ์—์„œ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ, ๊ฒฝ์Ÿ ์กฐ๊ฑด(Race Condition)  (0) 2025.04.08
[TIL ํ”„๋กœ์ ํŠธ] 4์ผ์ฐจ - ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ์™€ ๊ณ„์ธต ๊ตฌ์กฐ  (0) 2025.04.07
[TIL ํ”„๋กœ์ ํŠธ] 3์ผ์ฐจ - ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์™€ ๊ฒŒ์ž„ ์ตœ์ ํ™”  (0) 2025.04.03
'๊ณต๋ถ€' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • [TIL ํ”„๋กœ์ ํŠธ] 7์ผ์ฐจ - CPU ์บ์‹œ ํžˆํŠธ์™€ ์บ์‹œ ๋ฏธ์Šค
  • [TIL ํ”„๋กœ์ ํŠธ] 6์ผ์ฐจ - ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ & ์บ์‹œ ์ผ๊ด€์„ฑ (Memory Model & Cache Coherency)
  • [TIL ํ”„๋กœ์ ํŠธ] 5์ผ์ฐจ - ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ์—์„œ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ, ๊ฒฝ์Ÿ ์กฐ๊ฑด(Race Condition)
  • [TIL ํ”„๋กœ์ ํŠธ] 4์ผ์ฐจ - ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ์™€ ๊ณ„์ธต ๊ตฌ์กฐ
KiTFOx
KiTFOx
  • KiTFOx
    KiTFOx's Notepad ๐Ÿ“
    KiTFOx
  • ๊ณต์ง€์‚ฌํ•ญ

    • ๐Ÿ“ข KiTFOx
  • 250x250
    • KiTFOx (118)
      • ๊ณต๋ถ€ (8)
        • Cใ†C++ (7)
        • Design Pattern (2)
        • Crowd Simulation (2)
        • LearnOpenGL ๋ฒˆ์—ญ (3)
        • OpenGL ์ž๋ฃŒ ๋ฒˆ์—ญ (2)
        • OpenGL (1)
        • UE ์ž๋ฃŒ ๋ฒˆ์—ญ (1)
        • AR (0)
        • OpenCV (0)
      • ์•Œ๊ณ ๋ฆฌ์ฆ˜ (50)
        • ์ž๋ฃŒ๊ตฌ์กฐ (3)
        • BaekJoon (35)
        • Programmers (11)
      • OpenGL ๋”ฐ๋ผ๊ฐ€๊ธฐ (2)
      • ๊ฒŒ์ž„์—”์ง„ (15)
        • Unity (13)
        • UE4 (0)
        • UE5 (2)
      • ๋ฉ”ํƒ€๋ฒ„์Šค (4)
        • Engage VR (3)
        • Altspace VR (1)
      • ํฌํŠธํด๋ฆฌ์˜ค ํ”„๋กœ์ ํŠธ (2)
        • NewRo (1)
        • Amaimon(Unity3D) (0)
        • ArenaSurvival(UE5) (0)
      • ๊ฐœ๋ฐœ์ผ์ง€ (1)
        • Pub-Simulator (1)
        • Project-B (0)
      • ๋„คํŠธ์›Œํฌ (4)
      • Etc Study (5)
      • ๋Œ€์™ธํ™œ๋™ (8)
        • ํฌ๋ž˜ํ”„ํ†ค ์ •๊ธ€ ๊ฒŒ์ž„๋žฉ (6)
      • ํšŒ๊ณ ๋ก (0)
      • ๊ฒŒ์ž„ ํ•œ๊ธ€ํŒจ์น˜ (0)
  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.3
KiTFOx
[TIL ํ”„๋กœ์ ํŠธ] 8์ผ์ฐจ - Garbage Collection (GC)์™€ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”