2012-04-17 36 views
0

我有一個接近1 mil的節點,我正在計算強連接組件。我增加了虛擬機的堆大小爲10240 MB,但它仍然拋出這個異常:在大型圖上計算SCC時的Java堆棧溢出

Error: 875714 
Exception in thread "main" java.lang.StackOverflowError 
    at java.util.Stack.push(Stack.java:67) 

我絕對相信該代碼是不是問題,但大小。我還可以做些什麼?

更新:不管我在6秒後設置vm的堆大小,都會拋出StackOverflowError。

如果我解決不了的StackOverflow.com的的StackOverflowError,我不知道還有什麼地方轉=)

+0

你需要包含更多的代碼。如果您使用遞歸調用,則可能需要更改代碼以使用常規循環。 – 2012-04-17 16:22:48

+0

那麼,爲什麼不一開始就增加堆棧大小呢?去谷歌上查詢。 – 2012-04-17 16:23:41

+0

堆棧大小不能對StackOverflowErrors產生影響,因爲線程堆棧內存不是堆的一部分。您可以增加線程堆棧大小,但這是一個不同的JVM選項,-Xss我相信。 – 2012-04-17 16:25:58

回答

1

請記住,這StackOverflowError無關與java.util.Stack:錯誤被拋出時,沒有更多的調用堆棧空間(即遞歸太深),而不是在對象沒有空間的情況下。

我建議的第一件事是修改算法。我的盲目猜測是您正在使用遞歸訪問鄰居節點,導致溢出。嘗試使用循環代替遞歸。

對於短期目的,您還可以嘗試使用-Xss來增加堆棧大小(不是堆大小)。順便說一句,請記住,每個線程都有自己的堆棧。