728x90
https://www.youtube.com/watch?v=73yAjdkVhP8&list=PLVsNizTWUw7GN8wPRhclbKuQa9aI9Cj2V&index=23
📌 가비지 컬렉션
- C/C++은 객체에 대한 해제 코드가 필수 (GC없음)
해제 코드를 누락하는 경우 메모리 누수가 발생하고 프로그램 오류 발생 - C#은 힙에서 할당한 객체를 CLR이 자동으로 수거
CLR은 더이상 쓰지 않는 객체는 쓰레기로 판단하여 수거하는데, 수거하는 것이 가비지 컬렉션이다.
◾ CLR이 객체를 할당하는 과정
- CLR은 어플리케이션을 위한 메모리 공간을 통째로 확보
- 하나의 관리되는 힙을 마련
- 객체가 할당될 때마다 관리되는 힙에 순차적으로 적재
📌 가비지 컬렉션의 과정
◾ GC루트
- 루트는 힙에 잇는 객체를 붙드는 참조
- 루트는 a처럼 스택 또는 힙에 생성
- .NET 어플리케이션 실행 시 JIT 컴파일러는 루트 목록 생성
- CLR은 이 루트 목록을 관리하며 상태 갱신
루트 목록은 GC가 참조하는 중요 자료이다. - GC는 초기에 모든 객체가 쓰레기라고 가정한다.
- 루트 목록을 순회하면서 각 루트가 참조하는 힙 객체와 관계를 조사하여, 어떤 힙과도 관계가 없는 경우 쓰레기로 판단한다.
- 쓰레기 객체가 차지하고 있던 메모리는 비어있는 공간이 된다.
- 루트 목록에 대한 조사 후 GC는 힙을 순회하며 쓰레기가 차지하고있는 비어있는 공간으로 인접 객체들을 이동하며 정리
◾ 세대별 GC
- CLR은 메모리를 0, 1, 2의 3개 세대로 분리
- 객체의 나이가 어릴수록 메모리에서 빨리 사라지고, 나이가 많을 수록 메모리에서 오래 살아남는다고 간주
나이는 가비지컬렉션을 겪은 횟수로 친다. - 0세대 : 가비지 컬랙션을 한 번도 겪지 않은 갓 생성된 객체
- 1세대 : 0세대와 2세대 사이의 과도기에 있는 객체
- 2세대 : GC을 최소 2회이상 경험
728x90
'C# > 이것이 C#이다' 카테고리의 다른 글
[C# 기초강의] Ch 21. 네트워크 프로그래밍 (0) | 2023.08.10 |
---|---|
[C# 기초강의] Ch 20. WinForm으로 만드는 사용자 인터페이스 (0) | 2023.08.10 |
[C# 기초강의] Ch 19. 스레드와 태스크 (0) | 2023.08.10 |
[C# 기초강의] Ch 18. 파일 다루기 (0) | 2023.08.10 |
[C# 기초강의] Ch 17. dynamic 형식 (0) | 2023.08.10 |