处理大型数据集时出现内存错误

时间:2012-07-05 04:01:45

标签: java out-of-memory heap-memory

我正在LSI上运行代码,这需要首先从数据库中获取大量数据。它适用于小型数据集。因为,我增加了数据集,它给了我以下错误。

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space

我目前在具有2 GB RAM的系统上运行代码。错误是与RAM容量有关还是由于其他原因造成的。

谢谢!

5 个答案:

答案 0 :(得分:1)

运行Java时,您必须为特定问题传递VM参数。 您需要增加堆值:

-Xms40m - minimum heap size in MB
-Xmx1024m - maximum heap size in MB
  

java test.java -Xms40m -Xmx1024m

启动您的应用时。有关更多信息,请参阅Oracle documentation。或者,如果您使用Eclipse在ecliplse.ini文件中增加此大小。

答案 1 :(得分:1)

首先检查您为服务器分配了多少堆空间。如果它似乎很低,那么你可以使用以下参数来增加它 -

-Xms128m   -  minimum heap size in MB
-Xmx1024m -  maximum heap size in MB

通常,当可用的hep大小已满并且没有可用于程序正常执行的内存时,我们会收到此异常。

答案 2 :(得分:0)

如果它与你的RAM相关,你的处理器将停止Java。绝对不是。因为 java堆内存已满,堆空间中的所有对象都处于活动状态,因此不会执行垃圾收集过程。因此堆空间中没有足够的内存来处理更多数据。 Bcoz因为这个原因你得到了这个错误。

答案 3 :(得分:0)

除了增加应用程序可以拥有的最大堆大小(可能只需要执行此操作),听起来您可能会显着减少正在使用的内存量。如果要索引文档,则在标准LSI设置中,您应该一次只能将1个文档加载到内存中。所以说你有一个文件列表,你循环遍历列表并:加载,索引,关闭。冲洗并重复。

我认为这可能是您的问题,因为您的代码适用于较小的数据集。另一种可能性是,当您扩展数据集时,您将包含一些耗尽所有堆空间的巨大文档。在这种情况下,最简单的解决方案是增加堆空间。

答案 4 :(得分:0)

  1. -Xmx表示最大堆大小,
  2. -Xms表示初始堆大小,
  3. 重要的是,两种语法都区分大小写。好小心。

    如何在Tomcat中设置java堆大小? 停止Tomcat服务器,设置环境变量CATALINA_OPTS,然后重新启动Tomcat。查看文件tomcat-install / bin / catalina.sh或catalina.bat以了解如何使用此变量。例如,

    设置CATALINA_OPTS = -Xms512m -Xmx512m(Windows,没有“”围绕值) export CATALINA_OPTS =“ - Xms512m -Xmx512m”(ksh / bash,“”围绕值) setenv CATALINA_OPTS“-Xms512m -Xmx512m”(tcsh / csh,“”围绕值)

    在catalina.bat或catallina.sh中,您可能已经注意到CATALINA_OPTS,JAVA_OPTS或两者都可用于指定Tomcat JVM选项。 CATALINA_OPTS和JAVA_OPTS有什么区别?名称CATALINA_OPTS特定于Tomcat servlet容器,而JAVA_OPTS可能由其他Java应用程序使用 (例如,JBoss)。由于环境变量由所有应用程序共享,因此我们不希望Tomcat无意中获取用于其他应用程序的JVM选项。我更喜欢使用CATALINA_OPTS。

    如何在JBoss中设置java堆大小?

    停止JBoss服务器,编辑$ JBOSS_HOME / bin / run.conf,然后重启JBoss服务器。您可以使用JAVA_OPTS将行更改为:

    JAVA_OPTS =“ - server -Xms128m -Xmx128m”

    如何在Eclipse中设置java堆大小? 你有2个选择: 1.将eclipse-home / eclipse.ini编辑为如下所示并重新启动Eclipse。

    -vmargs-Xms64m-Xmx256m2。或者,您可以在最后运行带有其他选项的eclipse命令。 -vmargs之后的任何内容都将被视为JVM选项并直接传递给JVM。以这种方式在命令行中指定的JVM选项将始终覆盖eclipse.ini中的那些选项。 例如,

    eclipse -vmargs -Xms64m -Xmx256m

    如何在NetBeans中设置Java堆大小? 退出NetBeans,编辑文件netbeans-install / etc / netbeans.conf。例如,

    netbeans_default_options =“ - J-Xms512m -J-Xmx512m -J-XX:PermSize = 32m -J-XX:MaxPermSize = 128m -J-Xverify:none

    如果您有疑问,请参阅以下链接。感谢他们提供详细信息。

    enter link description here