【问题标题】:OutOfMemory Error for IOUtils.toByteArray()IOUtils.toByteArray() 的 OutOfMemory 错误
【发布时间】:2016-03-05 21:30:25
【问题描述】:

我在代码的下面一行收到 OOM 错误。有没有办法解决它?我尝试将堆大小增加到无用。

FileInputStream inputDoc = new FileInputStream(inputDoc1);
byte[] bytes = IOUtils.toByteArray(inputDoc);

upl.edmsDocument = bytes;

更新: 添加了以下参数-Xms2048m -Xmx2048m -Xincgc 然后我可以连续上传几个大文件,但性能并不一致。

【问题讨论】:

  • 那么,文件有多大?
  • 任何大于 10MB 的内容都会失败。但是,如果我发送 5 个 3MB 的文件,则不会出错。
  • 增加堆或流式传输数据
  • 就像我说的,增加堆大小不起作用。如何流式传输数据?
  • 你尝试增加多少堆大小?无论如何,这一切都取决于之后的数据会发生什么。基本规则是 - 每次处理数据块而不是将其全部读入内存。

标签: java file stream out-of-memory bytearray


【解决方案1】:

如果您知道输入的大小,则应使用toByteArray(inputDoc1, inputDoc1Size) 而不是toByteArray(inputDoc1)。请注意,正如API documentation. 中所述,您仍然受到 Integer.MAX_VALUE 条目的限制

【讨论】:

  • 每个输入都不同。如何获取每个文件的大小/
  • 试过这个。同样的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多