6
.NET Framework & Garbage Collector 김김김

NET Framework & Garbage Collector

Embed Size (px)

DESCRIPTION

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

Citation preview

Page 1: NET Framework & Garbage Collector

.NET Framework&

Garbage Collector

김진태

Page 2: NET Framework & Garbage Collector

.NET Framework• 탄생 배경

– java 대항– Mobile 기기에서의 불편한 개발환경– 인터넷의 등장

• .NET Framework의 지향점– 모든 환경에서 모든 언어로 개발 & 실행이 가능하도록 !!

• 장점– 언어적 , 플랫폼적으로 독립적– 적은 개발 비용– 강력한 보안– 많은 라이브러리

• 단점– native code와의 단절성– 플랫폼 독립적이기 위한 필요조건 (.NET Framework의 설치 )– 낮은 성능– 너무 많은 라이브러리 (학습의 비용 발생 )

Page 3: NET Framework & Garbage Collector

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

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

Page 5: NET Framework & Garbage Collector

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