2014-03-27 73 views
0

我在看下面的文章: Increase heap size in Java增加堆大小高達6GB

現在我有大概需要5GB內存,同時做什麼文章中說(即通過增加堆大小的程序 - Xmx5g在參數字段),我仍然得到

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 

我的系統是Windows 7(64位)與8GB的內存。難道我做錯了什麼?如果是的話,我該如何着手獲得5GB的堆內存,或者我的系統無法處理?

注意:我必須做一個25K * 25K大小的二維矩陣的計算,它具有所有非零值。因此我也不能使用稀疏矩陣。

+1

請問您能列出參數嗎? – Salah

+0

設置6G的內存並查看結果。我想,5G對於你的程序是不夠的,或者你沒有5G的免費系統內存。 – DmitryKanunnikoff

+0

@ salah-我只是在參數字段中添加了-Xmx5g,如果你在問什麼。 –

回答

2

OutOfMemoryError當JVM沒有足夠的內存分配對象時拋出。如果你定義了5G堆,這幾乎肯定意味着你有一種內存泄漏。例如,我可以寫非常簡單的代碼將在任何環境造成OutOfMemoryError

List<String> list = new LinkedList<>(); 
while(true) { 
    list.add("a"); 
} 

運行該代碼,並等待幾秒鐘。將會拋出OutOfMemoryError。這是因爲我添加了字符串列表並從不清除它。

我相信類似的事情發生在您的應用程序中。

我明白,它不像我的例子那麼微不足道,所以你可能不得不使用探查器來調試它並理解你的內存泄漏的原因。

編輯: 我剛剛看到你正在使用25K * 25K martrix。這意味着你有625M的電池。您沒有提及矩陣的類型,但如果它是佔用4個字節的int,則需要625 * 4 = 2500M = 2.5G內存,因此5G應該足夠了。

請嘗試分析你的程序中發生了什麼以及你的記憶在哪裏花了。

1

5G /(25K * 25K)〜8個字節。

慷慨地假定你的程序除了矩陣之外不使用內存,每個矩陣元素不得超過8個字節。

您應至少計算近似的內存要求,以檢查是否可以在硬件上處理這種大小的問題。例如,如果您需要一個MxN大小爲double的二維數組,那麼您至少需要8 * M * N個字節的內存。

+0

那麼(8 * M * N)b + 128m我會說,您需要在該矩陣之外的應用程序的呼吸空間;) – Gimby