我正在使用Jackson的ObjectMapper
将Java对象转换为String,以便将其写入我的日志文件中。
转换方法如下:
private String getResponseAsString(OrderResponse response) {
ObjectMapper mapper = new ObjectMapper();
try {
return mapper.writeValueAsString(response);
} catch (JsonProcessingException e) {
log.error("Error when converting response:" + getExceptionMessage(e));
return "Error when converting response";
}
}
运行程序后,我发现它在此方法上引发了OutOfMemoryError: Java Heap Space
错误:
,所以我认为我的程序内存不足。我阅读了一些文章,可以通过增加内存来克服此问题。但是现在,当我检查设置时,计算机中的默认 Xmx 已经接近4GB,所以我不想增加它。
任何人都可以给我一个提示,该如何将Object转换为String方法,将其替换为具有相同功能的另一个方法,从而节省内存?还是有人有其他想法/方法来解决这个问题。
答案 0 :(得分:0)
您有一个重的Java对象,需要将Java对象写入文件中。 并点击链接Click Here
private File getResponseAsString(OrderResponse response) throws JsonGenerationException, JsonMappingException, IOException {
ObjectMapper mapper = new ObjectMapper();
File file = new File("D:/cp/dataOne.json");
mapper.writeValue(file, response);
return file;
}
答案 1 :(得分:0)
我遇到了完全相同的问题,您正在尝试将一个非常大的对象转换为字符串。在 Java 中,String 对象对它可以拥有的长度以及它可以存储的内存有限制。参考这个答案:[https://stackoverflow.com/questions/816142/strings-maximum-length-in-java-calling-length-method]
在我的情况下,我能够通过使用
来解决问题
new ObjectMapper().writeValueAsBytes(response)
根据我的理解,增加堆空间无济于事,它确实对我不起作用。