我在Eclipse RCP应用程序内部使用依赖注入(DI)。我有很多的类,以下面执行类似的代码:内存泄漏/ ContextInjectionFactory/IEclipseContext
public class SomeClass {
@Inject
private IEclipseContext context;
private SomeObject void someMethod(){
SomeObject someObject =
ContextInjectionFactory.make(SomeObject.class, context);
// Do stuff with someObject
}
}
当我监视使用jvisualvm该应用程序,我注意到有内存泄漏缘于此。 EclipseContext对象不断增长,直到最终耗尽内存。
如果我这样做,内存泄漏消失:
public class SomeClass {
@Inject
private IEclipseContext context;
private SomeObject void someMethod(){
IEclipseContext childContext = context.createChild();
SomeObject someObject =
ContextInjectionFactory.make(SomeObject.class, childContext);
childContext.dispose();
// Do stuff with someObject
}
}
我还没有看到支持做我的解决办法的任何文件。在创建类之后是否有任何负面影响来处理childContext?在使用CIF时我还没有遇到过更好的方法吗?
对于它的价值,我的代码有很多类,其中一些用@Singleton/@Creatable注解。我不确定这些是否会受到处置父母的情况影响。
谢谢!
我还没有看到有任何泄漏的报告,我没有看到这在我的代码。 –
是的,这绝对是奇怪的。我的代码中唯一的区别就是上面显示的内容。我创建了很多对象,其中大部分会在不再需要时被破坏。在几天的过程中,我注意到在主要上下文中有数以百万计的对象引用,它会一直增长直到出现内存错误。如果我采取的解决方法一切都很好。您是否知道使用该解决方法会带来哪些负面影响? – ekjcfn3902039
如果您使用子上下文进行任何操作,则会注入IEclipeContext,如果稍后尝试访问它,它将最终访问处置的上下文。这给调试错误带来了困难。你知道EclipseContext类中的哪个字段正在存储所有这些引用吗? –