2010-08-09 59 views
0

我有一個Java應用程序,併產生大量的線程..並由於內存不足錯誤..如果它死亡運行時間太多..是否有一個jvm配置參數,我可以設置它以便在沒有可用內存時等待內存,而不是拋出內存不足錯誤。Java應用程序:請求在內存溢出的情況下等待

+1

我認爲你需要做的是看一個適當大小的Executors.newFixedThreadPool,並根據它們估計的內存消耗來限制你的線程。 – Yishai 2010-08-09 17:58:00

回答

0

我真的不認爲這是可行的設置爲jvm參數。您應該將-Xmx和-Xms設置爲JVM的適當值。之後,在您的代碼中,您可以使用Runtime.freeMemory檢查堆上當前的可用內存。如果可用內存太低,則可能會使線程處於睡眠狀態,直到您擁有足夠的內存來處理內存。

+0

另外,查看java.lang.management包的文檔,特別是MemoryMXBean。它使您可以訪問比運行時更詳細的信息。 – 2010-08-09 19:13:30

3

備份一下。如果您的應用程序創建的線程太多以致於JVM內存不足,那麼您確實需要重構以使用某種線程池機制。你可以捕捉到內存不足的異常,看看是否有線程釋放了資源,然後返回而沒有處理它,但這對我來說是一個不好的代碼。

+0

OutOfMemoryError被認爲是不可恢復的錯誤狀況。如果你抓住它,你可能無法做任何事情。由於它可以從代碼中的任何地方拋出,捕獲它可能不可能。參見:http://stackoverflow.com/questions/1692230/is-it-possible-to-catch-out-of-memory-exception-in-java – 2010-08-09 19:01:30

相關問題