개발전반

    매니지드언어의 메모리누수 (memory leak in managed language)

    매니지드언어의 메모리누수 (memory leak in managed language)

    가비지컬렉터가 있는 언어라고 해도 메모리누수는 생긴다. 대표적인예가 상호참조가 이루어졌을때이다. 예를들어 A라는 클래스가 B클래스를 참조하고 B라는 클래스가 A클래스를 참조할때이다. 가비지컬렉터는 작동방식이 다양하기는 하지만, 기본적으로는 reference count 방식을 사용한다. 즉, B클래스를 참조하는 포인터가 A클래스에 있으면 B클래스는 참조카운트가 1인 것이다. 이 참조카운트가 0이 되었을때 가비지컬렉터는 해당 객체를 쓰레기라고 판단하게 되고 지운다. 하지만 상호참조가 있을경우 A,B두 객체가 서로 참조하고 있기때문에 참조를 수동으로 끊지 않는이상 둘다 지우지 못한다. 왜냐하면 A를 지우려고 해도 B가 참조하고 있고 B를 지우려고 해도 A가 참조하고 있기 때문이다. 해결법은 C++의 경우에는 ..