从Weakreference创建强引用

时间:2011-09-22 07:59:09

标签: memory-management garbage-collection weak-references

以下是我们的应用程序的示例代码,我们试图保留一个巨大的页面模型对象的弱引用,这会占用大量内存。

Dictionary<int,WeakReference> modelCache;

IPageModel ReadPageModel()
{
   IPageModel page;
   if (!modelCache.ContainsKey(cacheKey) || !modelCache[cacheKey].IsAlive)
   {
      model = new PageModel();
      modelCache[cacheKey] = new WeakReference(Model);                
   }
   else
   {
      model = modelCache[cacheKey].Target as IPageModel;
   }
   return model;
}

我们返回的模型(在其他部分)是对弱对象的引用,因此稍后它可以为null。

是否有办法,以便我们可以创建对此对象的强引用,稍后当我们完成对象时,我们可以将它作为弱引用。

我遇到了一些例子,其中弱引用转换为强引用但反之亦然。

2 个答案:

答案 0 :(得分:0)

Java gc weakreferenced objekts只有当它们只是弱引用时才会出现。因此,只要你持有对象的正常引用,java就不会gc它,你就不会得到空引用。

答案 1 :(得分:0)

感谢Xeno Lupus,

所以引用是强引用,但在我把值对象收集之前.. 现在我修改了代码如下,

   IPageModel page;
   if (modelCache.ContainsKey(cacheKey) && modelCache[cacheKey].IsAlive)
   {
      model = modelCache[cacheKey].Target as IPageModel;                         
   }
   if(model == null)
   {
      model = new PageModel();
      modelCache[cacheKey] = new WeakReference(Model); 
   }
   return model;