文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>CLR via C# 读书笔记 5-3 对象复活(Resurrection)

CLR via C# 读书笔记 5-3 对象复活(Resurrection)

时间:2010-12-08  来源:听说读写

当GC想调用一个对象的Finalize方法的时候

GC会强制这个对象处于 活 的状态

只有当Finalize方法调用完成以后,这个对象才会永久的消失

主要原因是:Finalize方法中可能使用到这个对象的字段(Field),所以Finalize的过程中需要保证可以访问这些字段,所以要保证对象处在 活的状态

当Finalize方法执行完成的时候,这个对象才会真正的消失

 

2. 应用场景

一般情况下需要尽量避免使用对象复活,除非是一个对象需要被重复的使用,(其实我觉得还不如不回收这个对象呢,就让他一直活着吧)

 

3.当一个静态字段被Finalize的时候

 

internal sealed class SomeType {
~SomeType() {
Program.s_ObjHolder
= this;
}
}
public static class Program {
public static Object s_ObjHolder; // Defaults to null

}

当SomeType对象的Finalize方法被调用的时候,由于 有一个根节点引用了SomeType,同时SomeType这个对象被移动到Freachable队列中,这里就发生了对象复活,不过这个时候SomeType对象处在不可预料的情况 (- - 为了程序的稳定最好还是别用他)

 

 

PS:一个有Finalize方法的对象需要两次GC才会真正的挂掉

PS: 不知道怎么翻译freachable queue...- -

 

 

相关阅读 更多 +
排行榜 更多 +
吹风机射击 v1.0 安卓版

吹风机射击 v1.0 安卓版

飞行射击 下载
吹风机射击 v1.0 安卓版

吹风机射击 v1.0 安卓版

飞行射击 下载
吹风机射击 v1.0 安卓版

吹风机射击 v1.0 安卓版

飞行射击 下载