앱도메인

C#/CLR via 2020. 3. 25. 08:17
반응형

l  도메인 끼리의 객체는 다른 힙에 저장되므로 직접 접근을 막는다.

l  CLR은 어셈블리의 언로드를 지원은 하지 않지만 앱도메인의 언로드를 지원
결과적으로 도매인 내 어셈블리까지 전부 언로드 되는 형태

l  앱도메인끼리 분리되어 객체가 관리되기 때문에 개별적 권한 관리가 될 수 있다.

l  자신과 관련된 일련의 구성 설정 역시 개별적으로 가질 수 있다.

타입 객체에 할당된 메모리가 모든 앱도메인 사이에 공유되지 않기 때문에, 중간언어코드(Intermediate Language) JIT컴파일 되어 네이티브 코드가 생성된 것 마저도 공유되지 않는다. 때문에 서로 다른 정적 필드를 가질 수 있다.

 

앱도메인 언로드

1.      로더 힙 해제 및 프로세스 내 모든 스레드 일시중지

2.      CLR은 중지된 모든 스레드 스택을 뒤져 모든 스레드에게 ThreadAbortException 예외 발생

3.      스레드의 스택 Unwind 실행 및 finally 블록 수행
CLR
은 이 예외를 잡지만 종료처리를 하지 않는다. (계속 프로세스가 가동될 수 있도록)

4.      힙을 탐색해 언로드될 객체를 참조하는 프록시 객체에 플래그를 설치
해당 플래그가 있는 객체에 메소드 호출 시 AppDomainUnloadedException 발생

5.      강제로 가비지 수집 수행

6.      모든 스레드 재개

반응형

'C# > CLR via' 카테고리의 다른 글

직렬화 serialization  (0) 2020.03.25
어셈블리 로딩과 리플렉션  (0) 2020.03.25
가비지 컬렉터  (0) 2020.03.25
예외와 상태 관리  (0) 2020.03.25
사용자 정의 특성 (Creating Custom Attribute)  (0) 2020.03.25
Posted by Lotus' Library
,