有看过《C#与.net高级程序设计》这本书的朋友吗,帮忙理解“对象的生命周期”中的一小节!!小节名为:对象的生命周期之"应用程序根的作用"怎么理解应用程序根(application root),书的讲的不清楚,也许是翻译的不好吧什么叫应用程序“可达”和“不可达”

解决方案 »

  1.   

    分配对象使用new关键字,释放对象时只要将对象所有引用赋值为null,让程序不能够再访问到这个对象,我们称该对象为 "不可达的 "。GC将负责回收所有 "不可达 "对象的内存空间.对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象. 
    通过这种方式确定哪些对象是 "可达的 ",哪些对象是 "不可达的 "。当GC确定一些对象为 "不可达 "时,GC就有责任回收这些内存空间
    比如
    classTest  test=   new   classTest();
    test=null;
    那在堆上分配的内存上的数据   就无法访问到了.就是不可达对象
    看到这里可达的LZ应该明白了吧
      

  2.   

    怎么理解应用程序根(application root)
    应用程序根目录?
      

  3.   


    那什么是“application root”,即应用程序根,上面讲什么应用程序根的作用:根是一个存储位置,保存着对堆上一个对象的引用,后面又举出了根可以属于下面任何一个类别:
    全局对象的引用
    当前使用的静态对象,静态字段的引用
    一个给定的方法局部对象的引用
    传递给一个方法的对象参数的引用
    等待被终结(finalize)的对象的引用
    任何引用局部对象的CPU寄存器
    这些有什么类别有什么共同特征吗?为什么列举这些,而不是所有对象的引用??
      

  4.   

    http://msdn.microsoft.com/zh-cn/library/ms178473(VS.80).aspx
      

  5.   

    应用程序根就是程序根目录,web默认的wwwroot
    应用程序域(AppDomain)是很多应用程序域都可以运行在同一个.NET的进程中,可以降低系统消耗,同时不同的域之间互相隔离,在安全性方面有保障。
      

  6.   


    应用程序根(application root)不是程序根目录啊,书上说是一个存储位置,保存着对堆上一个对象的引用...
    但是我还是不太理解这句话和下面的举例:
    当前使用的静态对象,静态字段的引用 
    一个给定的方法局部对象的引用 
    传递给一个方法的对象参数的引用 
    等待被终结(finalize)的对象的引用 
    任何引用局部对象的CPU寄存器 
      

  7.   

    刚才又重点看了一下,理解如下:应用程序根其实就是对象引用。如果堆中分配的内存对于还被引用,就称为:该对象由应用程序根可达。
    如楼上classTest  test=  new  classTest(); 如果 test = null 那么称:该对象由应用程序根不可达。别扭死了,这名字起的。
    应用程序域是Net在Win32进程上进一步抽象的一个层次,
    对于net程序来说:windows中的一个进程中可以由多个应用程序域,每个应该程序域都可独立加载及卸载。