我的理解是这些bean是简单的java对象,但是一旦它们在构建时被删除并(惰性)初始化,它们就会无限期地保存在上下文中,即使它们长时间空闲也不应该是GC-able。
但是在浏览了2.0 CDI规范和bean生命周期/CDI相关的Quarkus文档后,我无法确认它。
有没有可能发生这种情况的具体情况?
因此,理论上,您可以执行AlterableContext#destroy(Contextual<?>)
-这将从上下文中删除上下文实例(即您的@ApplicationScoped
bean的实例),然后如果没有其他引用,它可以被垃圾收集。
例如,在quarkus中,您可以执行Arc.container().instance(MyApplicationScopedFoo.class).destroy()
。这将调用@PreDestroy
回调(如果存在),@PreDestroy
拦截器(如果绑定),并从应用程序上下文中删除MyApplicationScopedFoo
实例。