1 / 6

.NET Framework & Garbage Collector

.NET Framework & Garbage Collector. 김진 태. .NET Framework. 탄생 배경 java 대항 Mobile 기기에서의 불편한 개발환경 인터넷의 등장 .NET Framework 의 지향점 모든 환경에서 모든 언어로 개발 & 실행이 가능하도록 !! 장점 언어적 , 플랫폼적으로 독립적 적은 개발 비용 강력한 보안 많은 라이브러리 단점 native code 와의 단절성 플랫폼 독립적이기 위한 필요조건 (.NET Framework 의 설치 ) 낮은 성능

Download Presentation

.NET Framework & Garbage Collector

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. .NET Framework&Garbage Collector 김진태

  2. .NET Framework • 탄생 배경 • java대항 • Mobile 기기에서의 불편한 개발환경 • 인터넷의 등장 • .NET Framework의 지향점 • 모든 환경에서 모든 언어로 개발 & 실행이 가능하도록!! • 장점 • 언어적, 플랫폼적으로 독립적 • 적은 개발 비용 • 강력한 보안 • 많은 라이브러리 • 단점 • native code와의 단절성 • 플랫폼 독립적이기 위한 필요조건(.NET Framework의 설치) • 낮은 성능 • 너무 많은 라이브러리(학습의 비용 발생)

  3. .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를 운영한다.

  4. 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 우선 순위에 따라서 다양하게 구분되게 된다. (참조)

  5. 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

  6. 참조 • 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

More Related