類似的問題存在,但受關注沒有答案..java.lang.OutOfMemoryError:PermGen的空間解決方案
Here它說,「一個黑客來解決這個問題是JDBC驅動程序的類加載器加載比應用程序的類加載器,您可以通過轉移驅動程序的jar到Tomcat的lib,而不是捆綁於Web應用程序的WAR文件
沒明白是什麼意思由通用類加載器加載做到這一點,是如何從應用程序類加載它不同。
類似的問題存在,但受關注沒有答案..java.lang.OutOfMemoryError:PermGen的空間解決方案
Here它說,「一個黑客來解決這個問題是JDBC驅動程序的類加載器加載比應用程序的類加載器,您可以通過轉移驅動程序的jar到Tomcat的lib,而不是捆綁於Web應用程序的WAR文件
沒明白是什麼意思由通用類加載器加載做到這一點,是如何從應用程序類加載它不同。
這意味着加載JDBCDriver類的ClassLoader是您的應用程序服務器的類加載器,它是您的應用程序類加載器的父類。因此,驅動程序可用於您的服務器上的每個應用程序,而不是重新加載您的應用程序的每次重新啓動(這可能會導致PermGen的麻煩,如果你沒有正確註銷吧)
每次部署應用程序並加載cl驢從那裏(使用它),它將由應用程序類加載器加載。應用程序越多,加載的「相同」類越多。如果你使用tomcats的「common」類加載器,那麼這個類只會在每個tomcat安裝時加載一次。
OutOfMemoryError: PermGen space
通常只有一個問題,如果你使用熱重新部署Tomcat的功能。如果您的部署中只使用大量類,也會出現這種情況。
增加虛擬機中可用的PermGen的數量將解決大量的類問題。這可以通過將-XX:MaxPermSize=128m
或-XX:MaxPermSize=256m
添加到環境變量JAVA_OPTS
或CATALINA_OPTS
(通常可以在Tomcat啓動腳本中完成)來完成。如果您直接啓動Tomcat,則可以將這些環境變量導出到您的shell中。
不幸的是,這並沒有完全解決重新部署的問題,它只是讓你可以重新部署更多次,然後用完PermGen。要解決此問題,您需要確保您的網絡應用正確完整地卸載。這涉及確保您的Web應用程序啓動的所有線程都停止,並且加載的JDBC驅動程序在其他事物中未正確註冊。解決這個問題的另一種方法是在對應用程序進行更改時不使用熱重新部署並重新啓動Tomcat。
你確定這是它的工作原理嗎?無論有多少次啓動應用程序,只能加載一次類是可能的? – Andy897