OutOfMemoryError из-за сериализации Java Object в String с использованием Jackson - PullRequest
0 голосов
/ 28 июня 2018

Я использую ObjectMapper от Джексона для преобразования объекта Java в строку, чтобы записать его в мой файл журнала.
Метод конвертирования выглядит так:

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 в этом методе:

Exception thrown, поэтому я думаю, что моей программе не хватает памяти. Я прочитал несколько статей, которые я могу решить эту проблему, увеличив объем памяти. Но сейчас, когда я проверяю настройки, значение по умолчанию Xmx на моем компьютере уже составляет почти 4 ГБ, поэтому я не хочу увеличивать его больше.

Может ли кто-нибудь дать мне подсказку, как можно сэкономить память с помощью этого метода преобразования объекта в строку, заменив его другим методом с той же функцией? Или у кого-то есть другая идея / подход, как преодолеть эту проблему.

1 Ответ

0 голосов
/ 28 июня 2018

У вас тяжелый Java-объект, вам нужно записать Java-объект в файл. и перейдите по ссылке Нажмите здесь

 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;
}
...