닷넷 플랫폼 환경은 메모리 회수를 가비지 컬렉션에 의존하고 있습니다. 그래서 파일, 데이터베이스 연결과 같은 시스템 자원을 해제하기 위해 기존 C/C++과 다른 방식을 취합니다. 그 중 하나가 Finalizer 입니다. Finalizer는 시스템 자원을 해제하기 위한 최후의 보루로써 사용되곤 하지만 잘못된 사용 패턴은 관리되는 힙이 비 효율적으로 사용되게 만듭니다. 과거 제 글에서 아주 간단히 다룬 적이 있는 내용이지만, 이번 포스트에서는 Finalizer의 기본 내용과 사용 시 주의 사항들을 좀 더 자세히 살펴보도록 하겠습니다. 특히, Finalizer는 세대별 가비지 컬렉션과 연관이 있으며 다음에(언젠지 모르지만) 다루게 될 Dispose 패턴과도 밀접한 관련이 있으니 잘 알아 두시면 여러모로 도움이 되...
[More]
73892fae-1ff5-4e26-84da-a23668d29846|3|4.7
가상 메모리에 대한 내용은 다른 토픽들을 이해하는데 중요한 바탕이 될 뿐 아니라 다양한 문제를 해결하기 위해서도 필요한 내용입니다. 하지만 가상 메모리에 대해 잘 정리된 문서들을 찾아보기도 힘들뿐더러 그 내용도 매우 어렵습니다. 미천한 제 지식이라도 도움이 되었으면 해서 용기를 내어 이 토픽을 다루어 볼까 합니다. 가상 메모리 vs. 물리 메모리 독자들이나 필자나 개발을 하다 보면 별별 문제와 씨름을 하게 된다. 이런 문제들 중 하나가 바로 메모리 부족 오류, 즉 Out Of Memory 오류이다. 대개 OOM이라 부르는데, 오죽 많이 당했으면 줄여서 부르기까지 하겠나 하는 생각이 든다. 암튼 OOM이 떨어지면 언넘이 시스템의 메모리를 다 쳐먹는지 궁금하기 마련이다. 대개 사용되는 도구들은 작업 관리자나...
[More]
fc892ccd-7e42-48e5-9822-15cb2fe0445e|10|4.5
이번 포스트의 내용은 지난 포스트에서 다루었던 가비지 컬렉션 모드의 연장선 상에 있는 글로써 프로세스가 어떤 가비지 컬렉션 모드를 사용하는지 알아내는 방법과 Server-GC 모드 사용시 한번쯤 고려해 보아야 할 사항에 대해 다루고 있습니다. 가비지 컬렉션에 대해 어느 정도 알고 계시는 독자 분들일지라도 가비지 컬렉션 모드에 대한 포스트는 먼저 읽어 보실 것을 권장합니다. 가비지 컬렉션 다시 보기 Part I – 기본 작동 방식 가비지 컬렉션 다시 보기 Part II – 세대별 가비지 컬렉션 가비지 컬렉션 다시 보기 Part III – LOH 가비지 컬렉션 다시 보기 Part IV – 가비지 컬렉션 발생 시기 가비지 컬렉션 다시 보기 Part V – 가비지 컬렉션 모드 ...
[More]
9a20638d-9cae-4a03-a8a0-a4e97c368d27|1|5.0
어느덧 가비지 컬렉션 시리즈도 5번째나 되네요. 지난 포스트들에서 가비지 컬렉션의 기본 작동 방식과 세대별 가비지 컬렉션, LOH(Large Object Heap), 가비지 컬렉션 발생 시기를 살펴보았습니다. 이번 포스트는 CLR이 가비지 컬렉션을 수행하는 방식에 대한 내용입니다. CLR은 주어진 조건이나 설정에 따라 Workstation-GC, Server-GC 모드로 작동하게 되는데 이들에 대해 살펴보도록 하겠습니다. 특히, 닷넷 프레임워크 4.0에서 변경된 Background GC에 대해서도 살펴보도록 하겠습니다. 가비지 컬렉션에 대해 익숙하지 않으신 독자 분이나 이 글을 읽다가 이해가 안 가시는 분들은 지난 포스트들을 참고하시기 바랍니다. 가비지 컬렉션 다시 보기 Part I – 기본 작동 방...
[More]
ea74fa3d-4150-4594-81f1-faf74102ee87|5|5.0
이번 글은 최근 포스팅 중인 닷넷 가비지 컬렉션 시리즈의 네 번째 글입니다. 첫 번째 글에서는 가비지 컬렉션의 기본 작동 원리를 살펴보았고 두 번째 글에서는 세대별 가비지 컬렉션을 살펴보았습니다. 그리고 세 번째 글에서는 LOH(Large Object Heap)에 대해 살펴보았습니다. 이번 포스트에는 가비지 컬렉션이 언제 발생하는가에 대해 살펴보도록 하겠습니다. 이 내용은 원본 글에 언급되지 않은 내용이므로 이미 원본 글을 다 읽어본 독자들에게도 유용한 정보가 되리라 믿습니다. (아니면 말고… ㅡ,.ㅡ) 가비지 컬렉션 다시 보기 Part I – 기본 작동 방식 가비지 컬렉션 다시 보기 Part II – 세대별 가비지 컬렉션 가비지 컬렉션 다시 보기 Part III – LOH 가비...
[More]
42f6dc32-b60d-46b1-951d-e169c7e1084d|9|5.0
원래 이 시리즈(?)의 계획상, 3번째 글로는 가비지 컬렉션이 언제 발생하는지에 대한 글이고 그 다음이 LOH(Large Object Heap)에 대한 글이었습니다. 그런데 글을 쓰다 보니 LOH를 먼저 이야기 하는 것이 좋을 것 같아서 순서를 바꾸었습니다. LOH에 대한 내용은 월간 마이크로소프트웨어 2004년 10월에 기고한 원본 글에서는 이름만 살짝 언급한 수준이었습니다. 제 블로그 글들에서도 처음으로 상세하게 언급하는 토픽이므로 LOH에 대해 처음 접하시는 분이라면 알아두시면 정신/육체건강에 아주 초큼 도움이 되실 겁니다. LOH에 대해 이미 어느 정도 알고 계신 분들은 MSDN Magazine에서 Large Object Heap Uncovered를 읽어 보시길 권장합니다. 매우 상세하게 LOH에 대...
[More]
866ebab5-4e23-4460-ae85-f54ec7706d7e|4|5.0
이 글은 월간 마이크로소프트웨어(일명 마소) 2004년 10월호 닷넷 칼럼에 기고한 글을 다시 리뉴얼 한 것입니다. 원본 글이 오래되었기 때문에 현재와 맞지 않는 부분을 수정하면서 내용도 보강하였습니다. 지난 글이 어려웠다면 이번 글은 더 어려울 수 있습니다. 하지만 그림을 잘 이해하시면 도움이 되리라 믿습니다. 그럼 시작해 보죠. 가비지 컬렉션 다시 보기 Part I – 기본 작동 방식 가비지 컬렉션 다시 보기 Part II – 세대별 가비지 컬렉션 가비지 컬렉션 다시 보기 Part III – LOH 가비지 컬렉션 다시 보기 Part IV – 가비지 컬렉션 발생 시기 가비지 컬렉션 다시 보기 Part V – 가비지 컬렉션 모드 가비지 컬렉션 다시 보기 Part V...
[More]
4fb50a9f-47be-4572-9b35-b773278c1c57|12|4.6
CLR(Common Language Runtime)의 가비지 컬렉션(Garbage Collection)의 작동 원리를 파악한다는 것은 매우 중요한 일입니다. 가비지 컬렉션의 작동 방식을 충분히 파악해야만 어플리케이션의 메모리 문제를 해결할 수 있거나 왜 Dispose 코딩 패턴의 코드가 그 따구로 생겼는지 이해할 수 있기 때문입니다. 이 글은 월간 마이크로소프트웨어(일명 마소) 2004년 10월호 닷넷 칼럼에 기고한 글을 다시 재정리 한 것입니다. 원본 글은 오래되었고 닷넷 프레임워크 1.1 기준으로 작성되었던 것이기 때문에 이번에 새로이 리뉴얼 하는 것입니다. 리뉴얼 한 글은 여러 회에 나누어 게시될 것이고 내용이 상당히 보완될 것입니다. 가비지 컬렉션 다시 보기 Part I – 기본 작동 방식 ...
[More]
171aa885-0a36-4d92-bf98-4fba2b17c76b|15|4.9