반응형
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 |