我使用這個說法內存不足錯誤Java堆空間
//some code
int a[][]=new int[5000000][5000000];
//some code
,並命令運行它
java -mx512m Test
這是給的OutOfMemoryError:Java堆空間顯示在上述陳述的行號stacktrace
我該如何解決這個問題
編輯: 我試圖解決一個practice problem on codechef
我使用這個說法內存不足錯誤Java堆空間
//some code
int a[][]=new int[5000000][5000000];
//some code
,並命令運行它
java -mx512m Test
這是給的OutOfMemoryError:Java堆空間顯示在上述陳述的行號stacktrace
我該如何解決這個問題
編輯: 我試圖解決一個practice problem on codechef
我認爲你正在尋找的數據結構是一個稀疏矩陣。將元素和它們的座標一起存儲在地圖數據結構中(例如,對於2d稀疏數組,可以使用Map<Integer,Map<Integer,Integer>>
),並假設任何不在地圖中的值爲零。
是的,我想我會這樣做..它會節省內存以及迭代時間 – Shwetanka 2010-08-16 21:28:57
+1爲稀疏矩陣的想法,但我建議使用一個不需要太多複雜。就像'Map
您正在使用太多的內存。少用或多用。每個int元素都是32位。而你的內存限制爲512MB比你想象的要小得多。
for int [5000000] [5000000]您需要100000000000000B或100000GB。所以你只能等待大約100年,當這樣的事情成爲可能時。
你真的認爲100000 GB需要100年纔會經濟?友好的賭注怎麼樣? – 2010-08-16 21:35:33
獲勝者獲得10000 Gb USB密鑰。 – 2010-08-16 21:57:59
您可能需要考慮一種解決問題的方法,它需要較少的內存。
從谷歌計算器(假定64位整數大小):
(5 000 000^2) * 64 bits = 186 264.515 gigabytes
哇,這是一個巨大的陣列! – 2010-08-16 20:54:17
雖然java int被設置爲32位。 – 2010-08-16 21:10:40
我對Java的細節並不是很熟悉,所以我假設了64位計算機的默認整數大小。所以我可能會減少93,000 GB左右。 – pmalmsten 2010-08-16 21:15:24
好,這是25個萬億整數,其每一個需要4個字節,因此100個萬億字節的整體。最簡單的解決方案是購買大約90TB的RAM和64位的操作系統。
儘管如此,正確的解決方案可能是分配一個更合理的數據結構,可以更有效地存儲數據,假設您實際上不需要一次將90 TB的數據加載到RAM中。也許如果你發佈更多關於這個問題,我們可以給出更好的答案?
其實我試圖解決Codechef上的練習題http://www.codechef.com/problems/PRIMPATT/。我想我需要一個這樣大小的矩陣。任何幫助都可以使用 – Shwetanka 2010-08-16 20:59:36
如果通過在內存中建模整個字段來解決問題,則需要90太字節的數組,這是一個很好的信號,有更好的方法來解決問題。我認爲你必須找出一種方法來確定一個給定的方塊是否是黑色的,而不是實際模擬機器人經歷的整個過程。 – 2010-08-16 21:04:05
是的,我認爲我應該改變方法。但有一點如果我將類型從int轉換爲byte會有幫助嗎? – Shwetanka 2010-08-16 21:18:11
您需要更開明的數據結構。除非你真的需要25萬億個整數,這是值得懷疑的。
這是一個有500萬列和500萬行的矩陣。那真的是你想要的嗎?
在其他答案中,您的命令中有拼寫錯誤。
它應該是:java -Xmx512M Test
我面臨着關注文摘Java堆 和解決同樣的問題是修改mx512m到mx4096m或mx2048m(擴展內存所允許的最大值) 所以你的情況下,嘗試命令 的java -mx4096m測試這將允許Java使用4 GB的內存條。
這應該是被接受的答案。 – EyadMhanna 2015-08-16 13:11:13
工作謝謝 – ghiath 2015-08-16 13:11:36
是的這是正確的 – Firas 2015-08-16 13:12:41
你真的想用25萬億的矩陣實現什麼? – sinuhepop 2010-08-16 20:56:17
善良,你真的認爲你可以分配,並迭代,3秒內允許你的算法100TB的數據? – meriton 2010-08-16 21:11:36
_首先讓它工作,_然後_優化! – 2010-08-16 21:56:22