java - 内存不足错误 : Java heap space while converting some bulk data to toString()

标签 java out-of-memory

我遇到了 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/

相关文章:

JavaFX : Paint program with Canvas

java - 如何在 vscode 中将匿名类转换为 lambda 表达式,反之亦然?

android dalvik vm-heap 在 XZ 压缩时内存分配不足

java - 使用 Serenity BDD 进行自动化测试时出现堆内存不足错误

c - 我的 C 代码中出现 SIGABRT 错误的原因是什么?如何解决这个问题?

java - Logback 日志到主文件和客户端在单独的目录中

java - JNLP 文件在浏览器上以 xml 文件形式打开

java - 试图用 Postman 引发内存不足异常

java - Spring Boot不会在MySQL中创建表

java - StringBuilder 替代方案可实现更好的内存分配