【问题标题】:Exception in thread "Thread-2" java.lang.OutOfMemoryError: Java heap space线程“Thread-2”java.lang.OutOfMemoryError 中的异常:Java 堆空间
【发布时间】:2012-07-02 02:20:00
【问题描述】:

我试图使用 ObjectOutputStream 将其中一个类对象保存到文件中。当我的对象随大小增长时,我会收到以下错误,否则一切都很好。

线程“Thread-2”java.lang.OutOfMemoryError 中的异常:Java 堆空间 在 java.io.ObjectOutputStream$HandleTable.growEntries(ObjectOutputStream.java:2308)

我的代码如下所示:

 try {
        FileOutputStream fout = new FileOutputStream("D:\\out.dat");
        ObjectOutputStream os = new ObjectOutputStream(fout);
        os.writeObject(this.obj);  // Writing object to a File

        os.close();
        fout.close();
        os=null;
        fout=null;
    } catch (Exception e) {
        e.printStackTrace();
    }

请建议我如何解决这个问题?有什么替代方法可以达到同样的效果吗?

【问题讨论】:

  • 你想写什么this.obj?!
  • @nobeh obj 是我在程序中使用的类的对象。

标签: java java-io


【解决方案1】:

使用-Xms1024M -Xmx1024M 选项启动您的程序。除非该对象非常大和/或您的计算机具有少量 RAM,否则您通常不会收到该错误。

【讨论】:

  • 我的电脑有 4GB 内存。除了增加 JVM 大小之外,没有其他选项可以处理内存泄漏。任何内存优化技术都可以解决此类问题?请发表您的意见。
  • @Vasant 您可以使用内存分析器来找出您的应用程序在 CPU 和内存方面的使用情况。一旦您确定了应用程序中使用最多 cpu/内存的位置,您就可以对其进行优化。如果没有这种分析,你所能做的就是增加你的记忆力。
【解决方案2】:

前段时间我遇到过类似的问题,我有以下两个选项来解决此类问题:

  1. 通过调整 -Xms-Xmx 参数来增加 JVM 内存
  2. 如果对象真的很大,那么您可能应该考虑将其拆分成更小的块,以便在读取时重新组合

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 2011-01-23
    • 1970-01-01
    • 2016-11-24
    • 2020-12-20
    • 1970-01-01
    相关资源
    最近更新 更多