CDI应用程序和相关范围可以共谋影响垃圾收集? [英] CDI Application and Dependent scopes can conspire to impact garbage collection?

查看:127
本文介绍了CDI应用程序和相关范围可以共谋影响垃圾收集?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们正在开始尝试使用CDI实施我们的后端服务。情况是这样的:

具有@Startup的EJB在部署EAR时启动。一个ApplicationScoped bean被注入到这里:

  @ApplicationScoped 
public class JobPlatform {

private PooledExecutor threadHolder;

@Inject @Any
私有实例< Worker> workerSource;
...

这个bean还有一个Observer方法,当事件发生时观察,从Instance workerSource获取一个工作bean,并将其放在threadPool上,最终运行完成。



所有工作都很好。但是......我们已经开始看到垃圾收集问题。 JMAP堆直方图显示,这些工作人员中有很多人在闲逛,未垃圾回收。



我们认为这是CDI范围的组合。 @Dependant的API页面( http:/ /docs.jboss.org/cdi/api/1.0-SP1/javax/enterprise/context/Dependent.html )更清楚地说明了文档中的内容:

< blockquote>


  • 注入到字段,bean构造函数或初始化方法的范围为@Dependent的bean实例是bean或Java EE组件类实例的依赖对象,其中它被注入。
  • 注入生产者方法的范围为@Dependent的bean实例是生产者方法bean实例的依赖对象。

  • 通过直接调用Instance获得的具有@Dependent范围的bean的实例是Instance实例的依赖对象。




因此,遵循以下规则:

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆