Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当您需要更多的Java堆空间时,您会怎么做?_Java_Linear Algebra - Fatal编程技术网

当您需要更多的Java堆空间时,您会怎么做?

当您需要更多的Java堆空间时,您会怎么做?,java,linear-algebra,Java,Linear Algebra,对不起,如果以前有人问过这个问题,尽管我真的找不到解决办法 我不太擅长编程,但不管怎样,我正在抓取一堆网站,并将它们的信息存储在服务器上。我需要一个java程序来处理与每个文档相关联的向量坐标,大约10亿个文档,每个文档相关联的总数量为500000个加减。我需要计算整个矩阵的奇异值分解 据我所知,Java显然无法处理这么大的矩阵。如果我尝试制作一个相对较小的数组,大约4400万个,那么我将得到一个堆错误。我使用eclipse,因此我尝试将-xmx值更改为1024m,由于某种原因,它不会再高,即使

对不起,如果以前有人问过这个问题,尽管我真的找不到解决办法

我不太擅长编程,但不管怎样,我正在抓取一堆网站,并将它们的信息存储在服务器上。我需要一个java程序来处理与每个文档相关联的向量坐标,大约10亿个文档,每个文档相关联的总数量为500000个加减。我需要计算整个矩阵的奇异值分解

据我所知,Java显然无法处理这么大的矩阵。如果我尝试制作一个相对较小的数组,大约4400万个,那么我将得到一个堆错误。我使用eclipse,因此我尝试将-xmx值更改为1024m,由于某种原因,它不会再高,即使我有一台8gb内存的计算机

有什么解决办法?另一种检索我需要的数据的方法?以不同的方式计算SVD?使用不同的编程语言来实现这一点


编辑:现在,假设有10亿个条目,每个条目关联3个单词。我正在通过eclipse中的运行配置正确设置Xmx和Xms->这相当于运行java-xmsxxx-XmxXXXX。。。。。。在命令提示符下

可以使用-Xmx设置Java堆空间注意初始大写字母X选项,如果您使用的是64位JVM并且相应的物理内存可用,那么它肯定可以达到远远超过1GB的大小。你应该尝试以下几点:

java -Xmx6144m ...
也就是说,你需要重新考虑你的设计。每个对象都有很大的空间开销,每个对象的典型最小空间约为12到16字节,具体取决于您的JVM。例如,字符串的开销约为36-40字节

即使每个文档只有一个对象,也不可能有簿记开销!,您没有10亿100000000个文档的内存。即使对于每个文档一个int,也需要大约4GB


您应该重新设计应用程序,以利用矩阵中的稀疏性,并尽可能利用基于磁盘的存储。将所有内容都存储在内存中是很好的,但并不总是可能的…

Java堆空间可以使用-Xmx设置。注意,初始大写字母X选项,如果您使用的是64位JVM,并且相应的物理内存可用,那么它肯定可以达到远远超过1GB的大小。你应该尝试以下几点:

java -Xmx6144m ...
也就是说,你需要重新考虑你的设计。每个对象都有很大的空间开销,每个对象的典型最小空间约为12到16字节,具体取决于您的JVM。例如,字符串的开销约为36-40字节

即使每个文档只有一个对象,也不可能有簿记开销!,您没有10亿100000000个文档的内存。即使对于每个文档一个int,也需要大约4GB


您应该重新设计应用程序,以利用矩阵中的稀疏性,并尽可能利用基于磁盘的存储。将所有内容都存储在内存中是很好的,但并不总是可能的…

或者你可以对其应用一些数学知识,并使用分而治之的策略。这意味着,将问题分成几个小问题,以获得相同的结果

我对SVD了解不多,但本页可能会有所帮助:


或者你可以运用一些数学知识,使用分而治之的策略。这意味着,将问题分成几个小问题,以获得相同的结果

我对SVD了解不多,但本页可能会有所帮助:


您使用的是32位JVM吗?这些堆的大小不能超过2GB,我从未分配过超过1.5GB的内存。相反,使用64位JVM,因为它们可以分配更多堆。

您使用的是32位JVM吗?这些堆的大小不能超过2GB,我从未分配过超过1.5GB的内存。相反,使用64位JVM,因为它们可以分配更多堆。

-Xms和-Xmx是不同的。包含s的是起始堆空间,包含x的是最大堆空间

所以

首先给你512


正如其他人所说的那样,你可能需要把你的问题分解开来,让它发挥作用。您使用的是32位还是64位java?

-Xms和-Xmx是不同的。包含s的是起始堆空间,包含x的是最大堆空间

所以

首先给你512


正如其他人所说的那样,你可能需要把你的问题分解开来,让它发挥作用。您使用的是32位还是64位java?

对于这种大小的数据,您不应该计划将其全部存储在内存中。将此类数据外部化的最常见方案是将其全部存储在数据库中,并围绕数据库查询构建程序。

对于这种大小的数据,您不应计划将其全部存储在内存中。 将此类数据外部化的最常见方案是将其全部存储在数据库中,并围绕数据库查询构建程序

就目前而言,假设有10亿个条目,每个条目关联3个单词

如果你有10亿个条目,你需要10亿倍于每个条目的大小。如果您的意思是3 x int作为单词,那么至少对于数据来说是12GB。如果你的意思是把单词当作字符串,你可以列举这些单词,因为英语中只有大约10万个单词,而且它占用的空间也一样大

考虑到16GB需要几百美元,我建议购买更多内存

就目前而言,假设有10亿个条目,每个条目关联3个单词

如果你有10亿个条目,你需要10亿倍于每个条目的大小。如果您的意思是3 x int作为单词,那么至少对于数据来说是12GB。如果你的意思是把单词当作字符串,你可以列举这些单词,因为英语中只有大约10万个单词,而且它占用的空间也一样大



考虑到16GB的成本只有几百美元,我建议购买更多内存。

Java完全可以解决这个问题。我们有JVM,其大小可以增长到32 Gig。您可能错误地传递了-Xmx参数,或者发生了其他情况。您如何设置Xmx?不要把运行Eclipse的Xmx设置与实际程序的Xmx设置混为一谈,它们是两个不同的东西。十亿个文档?每个文档都有500000个数字……不,8GB内存中无法容纳这些数字。以每int四个字节计算,结果是1.7 PB。当你有一个拥有数百台计算机的数据中心时,再来看看。你可能会发现,重新考虑处理这种情况的方法会对你有更好的帮助。如果可能的话,递增计算。@pcalcao抱歉我把它们都改了。不管怎样,仍然需要更多的空间。Java完全可以处理这个问题。我们有JVM,其大小可以增长到32 Gig。您可能错误地传递了-Xmx参数,或者发生了其他情况。您如何设置Xmx?不要把运行Eclipse的Xmx设置与实际程序的Xmx设置混为一谈,它们是两个不同的东西。十亿个文档?每个文档都有500000个数字……不,8GB内存中无法容纳这些数字。以每int四个字节计算,结果是1.7 PB。当你有一个拥有数百台计算机的数据中心时,再来看看。你可能会发现,重新考虑处理这种情况的方法会对你有更好的帮助。如果可能的话,递增计算。@pcalcao抱歉我把它们都改了。还是需要更多的空间。这也可能需要64位PC/JVM,是吗?我认为32位上的最大堆大小将略低于2GB。他提到10亿个文档,每个文档有500k条记录,即500万亿条记录。即使它们每个只使用一个字节,它也不会工作…@Carl:事实上,我认为32位的最大堆空间大约是4GB2^32@Sidd:你到底在用什么操作系统?@DougRamsey:Linux 32位可以通过PAE扩展处理4GB以上的数据,但是单个用户进程仍然受到32位指针的使用和1/3或2/2地址空间分割的限制……这可能还需要64位PC/JVM,是吗?我认为32位上的最大堆大小将略低于2GB。他提到10亿个文档,每个文档有500k条记录,即500万亿条记录。即使它们每个只使用一个字节,它也不会工作…@Carl:事实上,我认为32位的最大堆空间大约是4GB2^32@Sidd:你到底在用什么操作系统?@DougRamsey:Linux 32位可以通过PAE扩展处理4GB以上的数据,但是单个用户进程仍然受到32位指针的使用和1/3或2/2地址空间分割的限制……在这一点上,64位jvm对我来说是不可能的,我只运行一台32位计算机。但是我不知道2GB是最大容量,谢谢你的建议。我想问题的答案就在于我如何处理这个问题的数学部分。@Sidd:一台有8GB内存的32位计算机?你确定吗?也许你只是在运行一个32位操作系统?在这一点上,64位jvm对我来说是不可能的,我只是在运行一台32位计算机。但是我不知道2GB是最大容量,谢谢你的建议。我想问题的答案就在于我如何处理这个问题的数学部分。@Sidd:一台有8GB内存的32位计算机?你确定吗?也许你只是在运行一个32位的操作系统?数据库和计算机代数系统不能很好地混合——太多的随机查询。数据库的延迟通常是一个性能杀手…数据库和计算机代数系统不能很好地混合-太多的随机查询。数据库的延迟通常是性能杀手。。。