我遇到了 java.lang.OutOfMemoryError: Java heap space
。大量数据转换为 toString()
。我有自己的 toString
代码实现。你可以看到下面的代码:
String dataStr = (new LargeData(objData)).toString();
public String toString()
{
try
{
if (localBase64Binary != null)
{
ByteArrayOutputStream out = new ByteArrayOutputStream();
localBase64Binary.writeTo(out); return out.toString("utf-8");
}
}
catch (IOException ex)
{
ex.printStackTrace();
}
return null;
}
我正在使用最大堆空间 -Xms128m -Xmx256m
。如果我增加堆空间,我只能推迟几天内存不足。这种情况有什么办法可以优化代码吗?
谁能指导我或帮助我解决这个问题?
最佳答案
一个问题是动态调整数组大小以添加更多元素。这需要分配一个比现有数组更大的新数组,然后复制元素。如果新数组大于堆空间的一半,则肯定会失败。
您的问题的解决方案是不使用 .toString()
。与其尝试将所有数据保存在 RAM 中,不如将文件流传递给该方法并将数据写入磁盘(或将其流式传输到套接字或管道)。
关于java - 内存不足错误 : Java heap space while converting some bulk data to toString(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11805740/