【问题标题】:Cdi Proxy object removal by garbage Collector in javaEEjavaEE中垃圾收集器清除Cdi代理对象
【发布时间】:2016-05-02 06:15:51
【问题描述】:

我目前正在从事一个使用焊接 Cdi 实现的 javaEE 项目。我分配了一个任务来分析我们应用程序中的内存泄漏和内存管理。我对垃圾收集器和 cdi 代理对象的以下方面感到困惑。我有 Cdi 会话范围的 LoginController bean。当两个或两个以上的用户登录而不是怀疑各自数量的 LoginController bean 被创建时。如果这个登录控制器 bean 被注入到另一个 bean 并且当访问另一个 bean 时,创建登录控制器的代理并处理请求.无论创建多少个LoginController,都只会创建一个LoginController Proxy对象的实例。

由于 LoginController bean 在会话超时时被垃圾收集。但是登录控制器的代理一旦创建就永远不会被垃圾收集,即使所有登录控制器 bean 都被垃圾收集。我想知道为什么..?

【问题讨论】:

    标签: cdi jsf-2.2 jboss-weld jakarta-ee


    【解决方案1】:

    代理对象在运行时创建一次,代表 CDI 创建的 bean。在会话(会话 ID)和每个代理背后的实例之间存在会话级别的引用。代理是被传递的,并且基本上总是在那里。

    这就是为什么,例如,您需要显式销毁手动注入的依赖作用域 bean。他们的代理人将永远存在。

    【讨论】:

    • 请根据我的具体情况详细说明
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-10
    • 2015-04-09
    相关资源
    最近更新 更多