【问题标题】:java.lang.outofmemory exception jvm heap size insufficientjava.lang.outofmemory 异常 jvm 堆大小不足
【发布时间】:2011-06-28 01:20:12
【问题描述】:

我试图读取一个只有一行的文本文件。文件大小超过 50Mb。当我尝试使用以下代码阅读它时,它给出了

java.lang.outofmemory 异常 jvm 堆大小不足

我将 java 堆内存更改为 1GB 。但它仍然给出了同样的例外。

设置 JAVA_OPTS=-Xms1024m -Xmx1024m

我使用愚蠢的代码片段来读取文件。

BufferedReader Filein1=new BufferedReader(新 FileReader(新 文件(“C:\ABC\MsgStream.txt”))); s=Filein1.readLine();

谁能告诉我如何克服这个问题。提前致谢。

【问题讨论】:

    标签: java


    【解决方案1】:

    JAVA_OPTS 是否真的在输出中运行?您可能需要将它们实际放在正在运行的命令行上,或者在其中包含 $JAVA_OPTS。

    【讨论】:

    • 我在命令提示符中运行'set java_opt'。它不包含在我的代码中。
    • @ganuke 你是如何运行程序的?你是在命令提示符下输入java MyMainClass 还是类似的东西?或者您是否在某处单击按钮。如果您使用 IDE 运行它,它可能会在加载时缓存 JAVA_OPTS 设置,并且在您重新启动 IDE(或其他一些重新加载机制)之前不会重新加载它们。
    • 我使用 netBeans 运行程序。设置环境变量后,我确实重新启动了 IDE。但它没有工作
    • 尝试从命令行运行它,或更改 netbeans 设置以了解如何运行程序。 (我不使用 netbeans,所以我对那部分无能为力:-X)
    【解决方案2】:

    JAVA_OPTS 环境变量仅受某些应用程序(例如,通常用于启动 Tomcat 的包装脚本)的影响。 java 命令不理会它。

    您需要将选项放在java 命令行... 在类名之前;例如

    java -Xms1024m -Xmx1024m ... some.pkg.MainClass ...
    

    (1Gb 堆应该足以缓冲 50Mb 文件。)

    【讨论】:

    • 我正在使用 netbeans IDE 来运行应用程序。那么我如何在那里使用您的选项。我可以使用在 NB 中构建项目后创建的 jar 文件运行它吗? java -jar -Xms1024m -Xmx1024m abc.jar。这是正确的..
    【解决方案3】:

    它是 _JAVA_OPTIONS 而不是 JAVA_OPTS

    如果你有类似的课程

    public class Test {
     public static void main(String args[]) {
       System.out.println("value : " + System.getProperty("foo"));
     }
    }
    

    那么你应该得到

    > set _JAVA_OPTIONS=-Dfoo=bar
    > java Test
    > value : bar
    

    【讨论】:

      猜你喜欢
      • 2014-08-02
      • 1970-01-01
      • 1970-01-01
      • 2017-06-05
      • 1970-01-01
      • 2013-12-05
      • 1970-01-01
      • 2012-01-10
      • 1970-01-01
      相关资源
      最近更新 更多