我一直在用多個模塊在Java上開發這個項目。由於相當一段時間,我偶爾會得到「java:Out Of Memory」錯誤!我對這個'流行'錯誤相當陌生,並且想知道一般方法來解決這樣的錯誤。
另外,有沒有標準工具行業接受,以幫助找出這種錯誤的原因?
我的項目中的模塊包括來自第三方(使用web服務)的每分鐘輪詢,多線程等等。然而,這只是一個指針,我尋求一個通用的方法,而不是我的項目特定的東西。
謝謝。java:通常的解決內存不足錯誤的方法
2
A
回答
3
有時你只是有一個類使用大量的內存,你需要增加堆的大小,或者做一個更節省空間的算法。其他時候,這是一個泄漏,你需要尊重對象。
- 運行
jvisualvm
(它包含在JDK中)。 - 連接到您的進程並嘗試是否可以重新創建 內存不足錯誤,同時關注堆大小。
- 當內存變大時執行堆轉儲。按大小搜索最大的對象 - 通常這會給你導致類的罪魁禍首 。
- 看看依賴關係,看看持有引用。如果是內存泄漏,請確保取消引用不需要的對象。
2
1
如果您不能增加可用內存,則必須消耗更少的內存。
不要保留對執行時不需要的對象的引用(如可以動態重新加載的數據),並在必要時重新設計流(例如,不要並行處理所有對象並按順序執行)當時需要更少的內存。垃圾收集應該爲你做剩下的工作。
尤其是如果您將大數據對象加載到內存中,請考慮在可能的情況下使用流式方法。例如。如果您想要搜索整個文件,則無需將整個文件加載到內存中。你可以單步穿過它。
除了建築問題,你也可以有泄漏:保持無意中引用你不再需要的對象。由於它們被引用,垃圾回收器無法釋放內存,並且在某個時刻內存不足。這可能是OutOfMemoryExceptions的第一個原因,它通常與static
引用有關,因爲類是第一次觸碰某個類後static
通常不是unloaded。互聯網上有許多關於查找/修復這些文章的文章,例如How to Fix Memory Leaks in Java
一個工具,我知道的是MAT
0
您可能有內存泄漏。發現它是一個挑戰。 Netbeans有一些工具可以幫助您分析虛擬機。您可以分析您的項目並在運行時查看男性使用情況。 Apache JMeter也可作爲插件使用,也可以自行運行。 JMeter.apache.org
0
如果你OOM過於頻繁,然後用正確的選項啓動Java,獲得一個堆轉儲與或與jHat從日食內存分析器分析它(http://www.eclipse.org/mat/)
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=<path to dump file>
相關問題
- 1. 內存不足錯誤未解決
- 2. 內存不足的錯誤(定解決方案不工作)
- 3. 如何解決內存不足異常錯誤?
- 4. Java的內存不足的錯誤
- 5. perl的錯誤「內存不足」的glibc檢測 - 如何解決
- 6. 如何解決android中的內存不足錯誤?
- 7. 如何解決MATLAB中的內存不足錯誤?
- 8. 內存不足異常java
- 9. 如何解決android應用程序內存不足錯誤
- 10. 如何解決Delphi內存不足錯誤?
- 11. 如何在Matlab中解決內存不足錯誤?
- 12. 使用靜態程序分析解決內存不足錯誤
- 13. 如何在Matlab中解決10800x10800矩陣內存不足錯誤?
- 14. 解決執行Perl腳本時出現內存不足錯誤
- 15. 我該如何解決Magento內存不足致命錯誤?
- 16. 如何解決PHPExcel內存不足錯誤?
- 17. Matlab解決ODE時出現內存不足錯誤
- 18. Android內存不足錯誤:如何解決這個問題?
- 19. Bitmap.createBitmap內存不足錯誤java
- 20. Java堆空間::內存不足錯誤
- 21. 內存不足錯誤Java堆空間
- 22. 內存不足錯誤,Java堆空間
- 23. java內存不足錯誤堆空間
- 24. Java內存分配解決方法
- 25. 解決使用大堆內存不足
- 26. 如何解決內存不足問題
- 27. 用dataSet.GetXml解決內存不足()
- 28. OpenCV內存不足錯誤
- 29. OpenCV錯誤:內存不足
- 30. 內存不足錯誤