Quarkus/CDI ApplicationScoped bean是否可以出于任何原因从上下文中删除或在运行时收集垃圾



我的理解是这些bean是简单的java对象,但是一旦它们在构建时被删除并(惰性)初始化,它们就会无限期地保存在上下文中,即使它们长时间空闲也不应该是GC-able。

但是在浏览了2.0 CDI规范和bean生命周期/CDI相关的Quarkus文档后,我无法确认它。

有没有可能发生这种情况的具体情况?

因此,理论上,您可以执行AlterableContext#destroy(Contextual<?>)-这将从上下文中删除上下文实例(即您的@ApplicationScopedbean的实例),然后如果没有其他引用,它可以被垃圾收集。

例如,在quarkus中,您可以执行Arc.container().instance(MyApplicationScopedFoo.class).destroy()。这将调用@PreDestroy回调(如果存在),@PreDestroy拦截器(如果绑定),并从应用程序上下文中删除MyApplicationScopedFoo实例。

最新更新