我一直在遇到問題,確保我正在銷燬的彈簧應用程序上下文已經完全消失,並且看不到垃圾收集對象。當我查看VisualVM中的實例時,我可以看到有一些對上下文和它的bean工廠的未完成引用,一旦上下文被關閉並銷燬,它們就會保留。這些都與bean工廠的初始設置(在AbstractApplicationContext的刷新方法期間)有關,該工廠使用各種bean後期處理器來註冊bean工廠和上下文等。乾淨地銷燬Spring應用程序上下文
似乎沒有任何方法在bean工廠或應用程序上下文(甚至是可刷新的上下文)上,它們除了刪除對bean工廠的最低級別引用外。其結果是它似乎在泄漏內存,並且在某些情況下阻止了上下文的清潔重新創建。
我問,因爲我是做什麼工作的可以動態地創建/銷燬,然後重新創建上下文(如模塊動態加載和卸載)和上下文和豆腐廠的剩餘元素是造成軟件組件的問題,例如spring-data-jpa(尤其是將存儲庫接口綁定到存儲庫實現的代理)。
有沒有人知道一種方式,我可以清理並完全刪除上下文和bean工廠,而不必完全關閉最初創建它的虛擬機?
謝謝,但正如我所提到的,這與整個容器的關閉無關。這是一個應用程序上下文的創建/銷燬而不關閉容器,因此關閉鉤子不會有幫助。 – Mike