在服務(wù)器運(yùn)行過程中,Spring不停的運(yùn)行的計(jì)劃任務(wù)和OpenSessionInViewFilter,使得Tomcat反復(fù)加載對象而產(chǎn)生框架并用時可能產(chǎn)生的內(nèi)存泄漏,則使用IntrospectorCleanupListener作為相應(yīng)的解決辦法。"
對于這一句話,引用關(guān)于IntrospectorCleanupListener一段解釋:
引用
spring中的提供了一個名為org.springframework.web.util.IntrospectorCleanupListener的監(jiān)聽器。它主要負(fù)責(zé)處理由 JavaBeans Introspector的使用而引起的緩沖泄露。spring中對它的描述如下:它是一個在web應(yīng)用關(guān)閉的時候,清除JavaBeans Introspector的監(jiān)聽器.web.xml中注冊這個listener.可以保證在web 應(yīng)用關(guān)閉的時候釋放與掉這個web 應(yīng)用相關(guān)的class loader 和由它管理的類如果你使用了JavaBeans Introspector來分析應(yīng)用中的類,Introspector 緩沖中會保留這些類的引用.結(jié)果在你的應(yīng)用關(guān)閉的時候,這些類以及web 應(yīng)用相關(guān)的class loader沒有被垃圾回收.不幸的是,清除Introspector的唯一方式是刷新整個緩沖.這是因?yàn)槲覀儧]法判斷哪些是屬于你的應(yīng)用的引用.所以刪除被緩沖的introspection會導(dǎo)致把這臺電腦上的所有應(yīng)用的introspection都刪掉.需要注意的是,spring 托管的bean不需要使用這個監(jiān)聽器.因?yàn)閟pring它自己的introspection所使用的緩沖在分析完一個類之后會被馬上從javaBeans Introspector緩沖中清除掉.應(yīng)用程序中的類從來不直接使用JavaBeans Introspector.所以他們一般不會導(dǎo)致內(nèi)部查看資源泄露.但是一些類庫和框架往往會產(chǎn)生這個問題.例如:Struts 和Quartz.單個的內(nèi)部查看泄漏會導(dǎo)致整個的web應(yīng)用的類加載器不能進(jìn)行垃圾回收.在web應(yīng)用關(guān)閉之后,你會看到此應(yīng)用的所有靜態(tài)類資源(例如單例).這個錯誤當(dāng)然不是由這個類自 身引起的.
用法很簡單,就是在web.xml中加入:
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
?