簡體   English   中英

如何減少Web應用程序中用於perm gen的內存

[英]How can I reduce the memory used for perm gen in web-app

我用tomcat7。 我的網絡應用程序包含:

  • 冬眠的
  • log4j
  • 傑多姆
  • 上傳罐子
  • mysql驅動
  • ...

lib的總數是30個jar文件。 我的托管人說:“ 您的程序分配了很多內存(用於Perm gen和堆)。請減少消耗的內存量 ”。

如何減少程序的內存需求?

如何減少燙發的記憶?

請幫我。

您可能應該先附加一個內存探查器,然后查看所使用的內存類型以及原因。 這個問題的答案列出了一堆可以嘗試的探查器。

堆是您分配用於在Java中存儲對象的所有內存。 每次使用“ new”都會在堆上分配內存,並且在最后一次引用清除后的一段時間內,內存將變為垃圾回收。 您可以執行以下一些典型的操作來減少堆的使用:通過使用StAX或SAX而不是JDOM,從內存中的解析API切換到流式API。 一旦不再需要對象,請在finally塊中清理,以修復內存泄漏或僅僅是對象保留所需時間過長的問題。 優化SQL查詢,使它們僅向應用返回恰好必要的數據,這可能是通過添加最大行約束或更嚴格的where子句來實現的。 限制上傳的大小,並將其流式傳輸到磁盤上的臨時文件,而不是將其保留在內存中。

彼爾姆一代是“永久一代”。 通常,直到JVM退出,才會釋放perm gen中的內存。 它主要用於存儲已加載的類。 因此,您可以執行的所有操作以減少類的加載量,這對您有所幫助。 這里有一些加載較少類的方法:盡量不要使用同一jar的多個版本。 嘗試在盡可能廣泛的上下文中加載jar,而不是WEB-INF / lib首選Tomcat的lib目錄或共享的lib目錄。 最小化webapp的重新加載,因為每次在Tomcat中重新加載webapp時,它都不會卸載所有類的舊版本,而是僅加載新類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM