1. 程式人生 > >使用spring、structs等框架時使用IntrospectorCleanupListener解決內存泄露問題

使用spring、structs等框架時使用IntrospectorCleanupListener解決內存泄露問題

自己 lean 容器 越來越大 tor 應用 structs 服務器 分析

在進行Java開發時,如果框架或者程序用到了JavaBeans Introspector了,那麽就啟用了一個系統級別的緩存,這個緩存會存放一些曾加載並分析過的javabean的引用,當web服務器關閉的時候,由於這個緩存中存放著這些javabean的引用,所以垃圾回收器不能對web容器中的javaBean對象進行回收,導致內存越來越大。spring中的提供了一個名為org.springframework.web.util.IntrospectorCleanupListener的監聽器。它主要負責處理由 JavaBeans Introspector的使用而引起的緩沖泄露。

(官方解釋)IntrospectorCleanupListener是一個在web應用關閉的時候,清除JavaBeans Introspector的監聽器.web.xml中註冊這個listener.可以保證在web 應用關閉的時候釋放與掉這個web 應用相關的class loader 和由它管理的類。.需要註意的是,spring 托管的bean不需要使用這個監聽器.因為spring它自己的introspection所使用的緩沖在分析完一個類之後會被馬上從javaBeans Introspector緩沖中清除掉.應用程序中的類從來不直接使用JavaBeans Introspector.所以他們一般不會導致內部查看資源泄露.但是一些類庫和框架往往會產生這個問題.例如:Struts 和Quartz.單個的內部查看泄漏會導致整個的web應用的類加載器不能進行垃圾回收.在web應用關閉之後,你會看到此應用的所有靜態類資源(例如單例).這個錯誤當然不是由這個類自 身引起的.

使用方法:在web.xml文件中進行配置

<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>

使用spring、structs等框架時使用IntrospectorCleanupListener解決內存泄露問題