我目前正在调查我编写的应用程序中的内存泄漏。在对堆转储进行一些分析后,我发现我将注意力集中在 MyFaces CODI 的奇怪行为上。
我大量使用 ViewAccessScope 并最近修改了我的代码以记录 @PostConstruct 和 @PreDestroy 回调以及相应实例的哈希码。
PostConstruct 回调按照我的预期执行,例如,当来自一个完全不同的视图时,它没有使用 bean。让我烦恼的是,从未调用过 @PreDestroy 回调(即使我(我认为我)确保在以下视图中的任何地方都没有对 bean 的引用)。
让我更加困惑的是,我编写了一个简单的小测试程序,其中包含 3 个视图,每个视图都由一个 ViewAccesScoped Bean 支持。当更改视图时,bean 会像我预期的那样被破坏,因为我来自的 bean 没有在 bean 中的任何地方引用我正在导航到的视图。
所以我想我的问题是,关于 ViewAccessScoped bean 的清理/销毁行为,除了 bean 引用之外还有其他因素需要考虑吗?
我在 JBoss AS Final 7.1.1 上使用版本 1.0.5 中的 MyFaces CODI