2017-01-01 82 views
-4

我目前的工作我的方式,通過一個項目,整個問題就來了。我寫的程序需要大數,大於int可以容納。所以,我使用了Math.BigInteger。在添加了許多BigInteger之後,我得到了OutofMemory錯誤。我假設這意味着數據類型不夠大。是否有更大的數據類型,如果不是,我該如何解決這個問題?因爲JVM運行的堆空間不足時是否有比BigInteger更大的變量類型?

+4

不,這不是異常意味着什麼。正如其名稱(及其javadoc)所示,這意味着JVM內存不足。 –

+0

好的,那麼是否有可能爲JVM分配更多內存?還是使用所有的系統內存? – OctopusProteins

+1

谷歌爲「是否有可能分配JVM更多的內存?」,你會得到你的答案。 Google是你的朋友。 –

回答

1

錯誤。您可以嘗試使用增加

java -Xmx256m MyClass.java 

Xmx- Max Heap Size 
+0

@OctopusProteins不要在Windows或終端的命令行中執行,如果是Linux然後執行程序。 – user1613360

+0

啊,我明白了。分配保存還是需要重新執行每次重新啓動? – OctopusProteins

+0

@OctopusProteins它只是一個命令。您無需在任何地方添加代碼。物理內存的默認最大堆大小爲物理內存的一半,直到物理內存大小爲192兆字節,否則爲物理內存的四分之一,直至物理內存大小爲1千兆字節。您可以在bash文件中設置它,以便它自動發生。 – user1613360

0

這將是更好,如果你在這裏粘貼代碼堆的大小,但我會盡力給與您到目前爲止發佈什麼答案。

Java的BigIntegers是根據需要進行大的房子你使用任何操作的結果。 BigIntegers就像Integers一樣沒有溢出異常。從oracle文檔:

算術運算的語義完全模仿Java的整數算術運算符的語義,如Java語言規範中所定義的那樣。

最有可能你不是你的java程序分配足夠的內存。你不知道如何執行你的Java進程,但你正在尋找這些參數來提供:

java -Xmx1024M -Xms1024M 
+0

是的,我現在正在嘗試。謝謝。 – OctopusProteins

3

有一個變量類型除BigInteger更大?

沒有沒有。 Biginteger在後臺使用字節數組,並在需要時爲它分配更多空間。它的大小限制是可用內存。

當你使用了一半的內存時,你可能會達到極限。在這一點上,如果它需要增加它的數量,它必須首先分配一個比它使用和使用的空間更大的空間。

相關問題