"在服務器運行過程當中,Spring不停的運行的計劃任務和OpenSessionInViewFilter,使得Tomcat反覆加載對象而產生框架並用時可能產生的內存泄漏,則使用IntrospectorCleanupListener做爲相應的解決辦法。"java
對於這一句話,引用關於IntrospectorCleanupListener一段解釋:web
引用spring
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的應用都沒有辦法作羣集。 xml
若是是個人話,我採起的辦法就是本身單獨啓動一個Job Server,來跑job,不會部署在web容器中。 對象