[C#] 1-1강 간단한 설명2 (가비지 컬랙션 등)

Dog발자·2024년 3월 20일

c#

목록 보기
2/8

1. 가비지 컬랙션

가비지 컬렉터가 출동하는 자체가 비용이 비싸다.

1. 메모리가 부족할 때 : 가비지 컬렉터가 메모리 전체를 읽는다(시간이 많이 걸림)

2. 내 프로그램이 아닌 공간을 돌 필요는 없다. 가비지 컬렉터가 돌 공간을 따로 만들어 둔 것이 로드맵

3. 가비지 컬렉터는 0세대에서 3세대까지 있다.

참조가 0이 아니어서 살아남는 애들은 다음 번에도 살아날 확률이 있다고 보고 세대를 한 단계 올려주고 그 세대를 검사하지 않는다.

다시 검사를 할 때는 1세대는 2세대가 되고 새로 살아남은 애들은 1세대가 된다.

3세대를 돌고도 메모리가 모자란 상황이 되면 1세대도 돈다. 그러고도 모자라면 상위세대를 검사
(디스포즈 : 세대 올릴 필요없이 바로 처리해주세요.) 라고 하더라도 살아남을 가능성 있음
가비지 컬렉터가 세대를 결정하는 범위는 설정가능하지만 끌 수는 없다.
[출처:명경지수후니]

using System; 

class Program
{
 
    /*
    ref: Reference(참조형)
    1. 해당 변수를 참조형으로 만들어준다.(C Point와 똑같다)
    2. Point는 주소를 저장하는 변수가 더 생기다면
       참조는 int _val라는 이름이 하나 더 생긴다고 보면 된다.
    3. ref는 호출 전에 초기화되어야 하고 메서드 내에서 변경 여부가 선택 사항
    이다
    [out]
    1. out은 호출 전에 초기화할 필요가 없고 메서드 내에서 반드시 값을 할당해야 된다.
    */
    private static void ChangeValue(ref int _val) 
    {
        _val = 100;
    }

    private static void ChangeValueOut(out int _val)
    {
        _val = 200;
    }
}

2. 메모리 영역


1) 클래스가 동적할당을 당하면
스택에 클래스에 저장이 되고
클래스 객채화 된 거는 힙 영역으로 간다.

0개의 댓글