我在我的應用程序中遇到臭名昭着的OutOfMemoryException,而不是簡單地增加可用的堆空間量,而是試圖查看問題的原因,以防萬一,從我的應用程序中出現某種泄漏。Java堆空間 - -Xmx如何工作?
我添加了JVM參數-XX:+ HeapDumpOnOutOfMemoryError它在遇到OutOfMemory錯誤時創建堆轉儲。然後我分析了使用不同分析工具生成的轉儲文件。然後我開始玩弄-Xmx參數並觀察模式。
讓我感到困惑的是以下幾點。爲什麼在分析轉儲時,我發現所有對象的總大小遠遠小於使用-Xmx參數設置的總大小?例如,假設我將-Xmx設置爲'2048m'。當我分析轉儲文件時,我在堆上發現了總共400Mb的對象。我期待找到2GB。我錯過了什麼嗎?
你是否檢查過你的OOME實際上提到了堆內存?有幾個(相對不常見的)OOME被拋出的情況,但它不是堆滿了。 –
對,@Joachim,JVM x86中的線程太多,OOM異常也崩潰 – aalku