Java 具有拦截器-内存副作用的命名CDIBean

Java 具有拦截器-内存副作用的命名CDIBean,java,jakarta-ee,jboss,java-ee-6,interceptor,Java,Jakarta Ee,Jboss,Java Ee 6,Interceptor,在我的项目(JEE6、JBoss7.1、JDK1.7)中,我有大约1000个@namedCDI,它们都继承自一个公共的@ConversationScope抽象类 我注意到,如果我定义了一个新的拦截器,并将该拦截器应用于抽象(因此,通过继承将其应用于前面提到的所有1000个CDIBean),那么应用程序的性能会急剧下降,无论是在初始启动期间还是在正常活动期间 我想知道我所做的是否有错,是否有一种方法不让内存量增加这么多,从而实现相同的目标,从而避免被迫在部署应用程序的所有生产环境中进行这样的更改

在我的项目(JEE6、JBoss7.1、JDK1.7)中,我有大约1000个@namedCDI,它们都继承自一个公共的@ConversationScope抽象类

我注意到,如果我定义了一个新的拦截器,并将该拦截器应用于抽象(因此,通过继承将其应用于前面提到的所有1000个CDIBean),那么应用程序的性能会急剧下降,无论是在初始启动期间还是在正常活动期间

我想知道我所做的是否有错,是否有一种方法不让内存量增加这么多,从而实现相同的目标,从而避免被迫在部署应用程序的所有生产环境中进行这样的更改


提前感谢您的帮助。

通过获取堆转储并使用Eclipse MAT对其进行分析,验证它是否真的是内存泄漏:。也许拦截器只是速度慢/开销大,而且与内存无关。谢谢你的回答。我已经验证过,只要打开/关闭拦截器(“beans.xml”中的注释/取消注释行),应用程序在启动时使用的内存量就会发生变化(在“used heap”中增加约20%)。另一点是,在启动时,这个拦截器永远不会被调用(它将在用户活动期间被调用,因为它拦截托管备份bean的方法)。有没有人对我的问题有什么想法,可以帮助我调查这个问题?看起来我遗漏了一些东西,但是什么呢?既然你给它贴上了java-ee-6标签,我想你试过java-ee-7,但没有发生?更多的内存使用不一定是内存泄漏!由于要激活拦截器CDI必须创建bean类的自定义子类,因此permgen会相应地增长,您可能正在观察到这一点。