转载Spring IntrospectorCleanupListener
生活随笔
收集整理的這篇文章主要介紹了
转载Spring IntrospectorCleanupListener
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
"在服務器運行過程中,Spring不停的運行的計劃任務和OpenSessionInViewFilter,使得Tomcat反復加載對象而產生框架并用時可能產生的內存泄漏,則使用IntrospectorCleanupListener作為相應的解決辦法。"
對于這一句話,引用關于IntrospectorCleanupListener一段解釋:
引用
spring中的提供了一個名為org.springframework.web.util.IntrospectorCleanupListener的監聽器。它主要負責處理由 JavaBeans Introspector的使用而引起的緩沖泄露。spring中對它的描述如下:它是一個在web應用關閉的時候,清除JavaBeans Introspector的監聽器.web.xml中注冊這個listener.可以保證在web 應用關閉的時候釋放與掉這個web 應用相關的class loader 和由它管理的類如果你使用了JavaBeans Introspector來分析應用中的類,Introspector 緩沖中會保留這些類的引用.結果在你的應用關閉的時候,這些類以及web 應用相關的class loader沒有被垃圾回收.不幸的是,清除Introspector的唯一方式是刷新整個緩沖.這是因為我們沒法判斷哪些是屬于你的應用的引用.所以刪除被緩沖的introspection會導致把這臺電腦上的所有應用的introspection都刪掉.需要注意的是,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>
只知道servlet標準不允許在web容器內自行做線程管理,quartz的問題確實存在。
對于Web容器來說,最忌諱應用程序私自啟動線程,自行進行線程調度,像Quartz這種在web容器內部默認就自己啟動了10線程進行異步job調度的框架本身就是很危險的事情,很容易造成servlet線程資源回收不掉,所以我一向排斥使用quartz。
quartz還有一個問題就是不支持cluster。導致使用quartz的應用都沒有辦法做群集。
總結
以上是生活随笔為你收集整理的转载Spring IntrospectorCleanupListener的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP_递归实现无限级分类
- 下一篇: Python调用golang