写入文件时java堆空间错误

时间:2017-10-18 11:15:50

标签: java arrays bufferedwriter

我正在尝试将64000条记录中的大量数据一次写入文件。我得到的例外是我附上的。 enter image description here

我以前编写的代码是

Path outputpath = Paths.get("file1.json");
try (BufferedWriter writer = Files.newBufferedWriter(outputpath, StandardCharsets.UTF_8, WRITE)) {
 writer.write(jsonObject.toString());
} catch (Exception e) {
//error msg
}

这里我的“jsonObject”只不过是一个包含65000行的json数组。

请你帮我把这个写入我的文件有效的方式,这样我就可以避免堆空间错误

2 个答案:

答案 0 :(得分:1)

你已经把你的堆栈跟踪缩短了一点,但我会假设在jsonObject.toString()中发生了异常。

基本上,你必须在两件事之间做出决定:要么分配更多内存,要么将大操作分成几个较小的内存。添加内存快速而简单,但如果您希望将来有更多数据,它将无法永远解决您的问题。正如其他人所提到的,在java命令行上使用-Xmx和/或-Xms。

您可以尝试的下一件事是使用不同的JSON库。也许您现在使用的那个并不特别适合大型JSON对象。或者可能有更新的版本。

作为最后的手段,您始终可以自己构建JSON。毕竟它是一个字符串,你已经拥有了内存中的数据。为了尽可能高效,您甚至不需要一次构建整个字符串,您可以随意向BufferedWriter写入一些内容。

答案 1 :(得分:-1)

您可以通过json对象尝试iterate

Iterator<String> keys = (Iterator<String>) jsonObject.keys();
while (keys.hasNext()) {
    String key = keys.next();
    JSONObject value = jsonObject.getJSONObject(key);
    writer.write(value.toString());
}

PS。你需要检查你的json对象的结构。