zoukankan      html  css  js  c++  java
  • CLR 基本概念理解

    AppDomain

    AppDomain可以视为一种轻量级进程,AppDomain可以像进程一样独立加载Assembly。一个Windows进程可以包含多个AppDomain。但是与进程不同的是,进程与线程有隶属关系,但是,AppDomain和进程之间是正交的,他们没有隶属关系。例如,一个进程存在两个AppDomain:ADA和ADB,对象A来自ADA,对象B来自ADB,如果A的某个方法调用了B的方法,这两个方法会在同一个线程中执行。
    使用AppDomain的好处
    创建AppDomain所需要的系统资源比创建一个Windows进程要少;
    同一个Windows进程内的AppDomain之间可以共享资源,如地址空间、线程、CLR等等;
    Notice:
    当AppDomain加载了某个Assembly后,就不能再将它从AppDomain中卸载掉,除非将整个AppDomain卸载,但是卸载AppDomain会产生非常严重的后果。
    AppDomain的孤立性
    1.
    2.
    3.
    Host and Hosting
    CLR并没有和操作系统集成,进程创建时必须由自己完成加载CLR的操作。加载CLR是由运行库宿主(Runtime Host)来完成的,Host的非托管代码部分负责CLR的加载、配置以及将当前线程转交给托管代码,CLR加载完成后,Host还要负责处理未捕获的异常等任务。一个CLR宿主与操作系统,以及CLR的关系如下图所示。

    不同的运行库宿主将会影响应用程序的性能,还可以定义应用程序可用的功能。微软预提供的Runtime Host包括:

    1. Console和WinForm 运行库宿主:执行的程序集在默认的AppDomain中加载,隐式加载的程序集被加载到与引用程序集所在的同一个AppDomain中,这类应用程序无需使用除默认AppDomain之外的域;
    2. ASP.Net运行库宿主:为每一个Web应用程序创建一个AppDomain;
    3. Microsoft IE运行库宿主:默认情况下,这个Host为每一个被访问的Web站点创建一个AppDomain,这样可以允许每个站点使用不同的安全级别;
    4. SQL Server 2005运行库宿主:允许数据库的查询请求使用IL代码编写;

    弱引用
    在应用程序执行期间,每个对象在任意时刻要么是活动的,也就是有引用指向这个对象;要么就是非活动的,也就是没有引用指向这个对象,也就不能再访问这个对象了。为了满足一些应用程序(比如缓存等)的需要,对象还可以有第三种中间状态,如果对象处于这样的状态,应用程序还可以访问这个对象,GC也可以随时释放它。要使对象处于这样的状态就需要使用弱引用(weak reference)来引用对象。使用弱应用引用的对象就既可以被应用程序访问,又可以被GC回收。

  • 相关阅读:
    浮动元素的应用
    网页中选中文字 ,复制的颜色会变化
    JVM指令重排
    JVM相关的几个基本概念
    Cygwin安装apt-cyg
    MySql四种隔离级别
    Django利用form进行显示
    Django在不启动server的情况下调用方法
    Js实现hashMap
    Js编写的菜单树
  • 原文地址:https://www.cnblogs.com/whyandinside/p/1574398.html
Copyright © 2011-2022 走看看