以下是我们的应用程序的示例代码,我们试图保留一个巨大的页面模型对象的弱引用,这会占用大量内存。
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。
是否有办法,以便我们可以创建对此对象的强引用,稍后当我们完成对象时,我们可以将它作为弱引用。
我遇到了一些例子,其中弱引用转换为强引用但反之亦然。
答案 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;