2011-09-08 23 views
0

在我的申請的應用程序和JVM本身。我知道也許不是一個普通的話題,「從JVM卸載類」,有一些條件發生,所以我正在做必要的努力。爲了確保在所有工作預計像我正在跟蹤的類加載和卸載與-XX:+ TraceClassLoading和-XX:+ TraceClassUnloading,從這個參數的信息讓我發現,我可以做任何模塊的完全卸載mi應用程序和JVM本身(在完整GC期間從JVM卸載)。所有這一切似乎工作正常......但我的問題是爲什麼模塊類被加載的.jar文件被JVM保持打開,那個.jars不能被刪除,但是JVM說已經從它們中卸載了類。顯然,這是在JVM執行期間,但是爲什麼如果JVM沒有從它們加載類時保持打開該.jar文件,我可以做什麼來強制JVM釋放該.jar文件?類加載/卸載的加載類具有不同的類裝入器來從JVM卸載它們當我使用的ServiceLoader時不從上下文需要加載模塊與不同類加載器(從.jar文件的類)以完全卸載它們不需要

回答

0

問題應不同的Web容器內進行深入探討。

一些谷歌搜索顯示出來表示Tomcat 6.x的有選擇antiJARLocking該選項在Tomcat的源用於在http://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk/java/org/apache/catalina/loader/

請閱讀來源,你會得到的加載/卸載代碼示例在那裏。

+0

有關「antiJARLocking」的信息說:「如果爲true,Tomcat類加載程序將採取額外措施,以避免在通過URL在JAR內部訪問資源時JAR文件被鎖定,這會影響應用程序的啓動時間,但可能會證明是有用的在可能發生文件鎖定的平臺或配置上。「。所以你建議做同樣的tomcat?而且JVM不夠智能來釋放文件? – Wyvern666

相關問題