Upload
phyllis-blackwell
View
42
Download
0
Embed Size (px)
DESCRIPTION
.NET Framework & Garbage Collector. 김진 태. .NET Framework. 탄생 배경 java 대항 Mobile 기기에서의 불편한 개발환경 인터넷의 등장 .NET Framework 의 지향점 모든 환경에서 모든 언어로 개발 & 실행이 가능하도록 !! 장점 언어적 , 플랫폼적으로 독립적 적은 개발 비용 강력한 보안 많은 라이브러리 단점 native code 와의 단절성 플랫폼 독립적이기 위한 필요조건 (.NET Framework 의 설치 ) 낮은 성능 - PowerPoint PPT Presentation
Citation preview
.NET Framework&
Garbage Collector
김진태
.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• 예) 가장 단순한 형태
– 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가 발생한다는 단점을 가지고 있다 .
STEP1
STEP2
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