60 likes | 278 Views
.NET Framework & Garbage Collector. 김진 태. .NET Framework. 탄생 배경 java 대항 Mobile 기기에서의 불편한 개발환경 인터넷의 등장 .NET Framework 의 지향점 모든 환경에서 모든 언어로 개발 & 실행이 가능하도록 !! 장점 언어적 , 플랫폼적으로 독립적 적은 개발 비용 강력한 보안 많은 라이브러리 단점 native code 와의 단절성 플랫폼 독립적이기 위한 필요조건 (.NET Framework 의 설치 ) 낮은 성능
E N D
.NET Framework • 탄생 배경 • java대항 • Mobile 기기에서의 불편한 개발환경 • 인터넷의 등장 • .NET Framework의 지향점 • 모든 환경에서 모든 언어로 개발 & 실행이 가능하도록!! • 장점 • 언어적, 플랫폼적으로 독립적 • 적은 개발 비용 • 강력한 보안 • 많은 라이브러리 • 단점 • native code와의 단절성 • 플랫폼 독립적이기 위한 필요조건(.NET Framework의 설치) • 낮은 성능 • 너무 많은 라이브러리(학습의 비용 발생)
.NET Framework • 지향점을 위한 .NET Framework에서의 지원 • 다양한 언어 지원(C#, C++, BASIC, J#) • 각각의 언어에는 해당 컴파일러가 존재하고 해당 컴파일러는 machine code가 아닌 MSIL을 생성 • CTS(Common Type System) • .net언어는 모두 같은 type을 사용 • 이러한 이유로 C#에서는 C++클래스를 바로 사용할 수 없기 때문에 중간에 Managed C++을 이용한 wrapping class가 필요한다. • CLS(Common Language Specfication) • .net언어들끼리 지켜야 하는 최소한의 사항 • 예) 전역 함수나 변수는 정의할 수 없음 • MSIL(MicroSoft Intermediate Language) • machine code로 변환하기 쉬운 상태 • 플랫폼 독립적 • CLR에 의해 실행된다. • CLR(Common Language Runtime) • JIT에 의해 동적으로 컴파일되어 변환된 기계어 코드를 실행하고 관리한다. • 관리 : 보안, 메모리 관리 등 • CLR에서는 직접 메모리를 관리해주기 위한 Garbage Collector를 운영한다.
Garbage Collector • Garbage Collector란? • 쓰레기(더 이상 사용되지 않는 오브젝트)를 수집하는 역할을 하는 것이다. • 더 이상 사용되지 않는 오브젝트는 해당 오브젝트에 대한 참조가 더 이상 존재하지 않는 것이다. • 예) Object a = new Object(); a = null; a가 가리키던 오브젝트는 더 이상 참조하지 않으므로 GC에 의해 메모리 해제 대상이 된다. • unmanaged Code에서는 메모리에 대한 할당과 해제를 직접 해주어야 하므로 실수하게 되면 memory leak으로 인한 momery overflow가 발생하여 프로세스가 죽는 일이 발생할 수 있다. • 이를 GC가 메모리에 대한 할당과 해제를 담당해준다면 프로그래머는 좀 더 프로그래밍 그 자체에 집중 할 수 있어 프로그램의 난이도가 낮아지게 된다. • 하지만, 메모리를 직접 컨트롤 해야 하는 경우도 발생할 수 있어 그러한 부분에서는 unmanaged code를 사용하게 된다. • GC Algorithm • GC Algorithm은 아래 관점에 따라서 아주 다양한 알고리즘이 존재하고 지금도 계속 발전된 형태의 GC Algorithm이 발표되고 있다. • Serial / Parallel • Serial : GC 대상을 GC 혼자서 처리 • Parallel : 여러 개의 GC가 나누어서 함께 처리 • Stop-the-world / Concurrent • Stop-the-world : 프로그램의 수행을 중단 한 채 GC가 동작 • Concurrent : 프로그램의 수행을 안 멈추고 GC와 program이 같이 수행 • Compacting / Non-compacting / copying • Compacting : 메모리 단편화 현상을 제거하여 연속된 빈 공간 확보 • Non-compacting : 배째라 하고 메모리 단편화 현상 제거 안함 • copying : GC 실행 뒤에 살아남은 객체들을 일정 영역으로 복사하고 원본 영역을 쓰레기로 보고 추후 해제하는 방식 • 이뿐 아니라 GC의 자료구조 형태에 따라 GC 우선 순위에 따라서 다양하게 구분되게 된다. (참조)
Garbage Collector STEP2 STEP1 • 예) 가장 단순한 형태 • STEP1. object를 생성할 때마다 heap에 하나씩 쌓이게 된다. • STEP2. GC가 실행되면 Roots영역(전역변수, 로컬변수 등)에서 직접/간접으로 참조하는 object를 체크한다. • STEP3. 참조가 없는 object는 해제가 된다. • 예) Generational GC • 실제 object에서는 LRU와는 반대로 생성된 지 오래 된 object가 더 오래 살아남는 경우가발생한다. • 그래서 오래된 object의 경우에는 GC 수행을 생긴 지 얼마 안된 object에 비해 적게 수행해도 된다. • 이러한 이유로 오래된 object를 저장하는 영역과 새로 생성된 object를 저장하는 영역을 나누고 각 영역에 적용하는 GC 알고리즘을 다르게 하는 것을 Generational GC라 한다. • 영역을 나눔으로써 효율적인 GC 알고리즘을 적용할 수 있는 장점이 있지만, 그 중 한 영역이라도 꽉 차게 되버리면Out of Memory가 발생한다는 단점을 가지고 있다. STEP3
참조 • http://blog.naver.com/soldatj?Redirect=Log&logNo=10083952690 • http://ko.wikipedia.org/wiki/닷넷_프레임워크 • http://ryudaewan.springnote.com/pages/145343#toc_2 • http://wiki.ex-em.com/index.php/Garbage_Collector • http://msdn.microsoft.com/ko-kr/magazine/bb985010(en-us).aspx