2017-01-01 25 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在后台使用字节数组,并在需要时为它分配更多空间。它的大小限制是可用内存。

当你使用了一半的内存时,你可能会达到极限。在这一点上,如果它需要增加它的数量,它必须首先分配一个比它使用和使用的空间更大的空间。

相关问题