OutOfMemoryError при чтении JSON с Джексоном и Android
Я столкнулся с проблемой, которую я создал невинно. Итак, у меня есть этот JSON, который я использую для хранения объекта с использованием SnappyDB, и этот объект сохраняется, потому что пользователь может отправить этот JSON на сервер, когда он выходит в сеть. Если он не в сети, объект сохраняется для последующей отправки.
Моя ошибка состояла в том, чтобы сохранить объект готовым к отправке, то есть, например, я сохранил JSON, содержащий base64 изображений. Теперь я знаю свою ошибку и исправил хранение пути к изображению и преобразование только тогда, когда объект будет отправлен.
В любом случае, настоящая проблема, которую я пытаюсь решить, состоит в том, что в устройстве был успешно сохранен объект, но я получаю OutOfMemoryError
когда я пытался получить к нему доступ, т. е. у меня не было проблем при сериализации, но теперь я сталкиваюсь с проблемой при десериализации. Могу ли я что-нибудь сделать, чтобы восстановить этот объект, или я могу считать его потерянным?
PS: я не вставлял код здесь, потому что он достаточно прост, и я решаю проблему большую часть времени. В основном я использую общий миксин Джексона
Вот журнал ошибок:
Fatal Exception: java.lang.OutOfMemoryError: Failed to allocate a 596370 byte allocation with 433384 free bytes and 423KB until OOM
at java.lang.StringFactory.newStringFromChars(StringFactory.java)
at java.lang.AbstractStringBuilder.toString(AbstractStringBuilder.java:629)
at java.lang.StringBuilder.toString(StringBuilder.java:663)
at com.fasterxml.jackson.core.util.TextBuffer.contentsAsString(TextBuffer.java:349)
at com.fasterxml.jackson.core.json.ReaderBasedJsonParser.getText(ReaderBasedJsonParser.java:235)
at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:29)
at com.fasterxml.jackson.databind.deser.std.StringDeserializer.deserialize(StringDeserializer.java:12)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:523)
at com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:95)
at com.fasterxml.jackson.databind.deser.impl.BeanPropertyMap.findDeserializeAndSet(BeanPropertyMap.java:285)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:248)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:136)
at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserialize(ObjectArrayDeserializer.java:156)
at com.fasterxml.jackson.databind.deser.std.ObjectArrayDeserializer.deserialize(ObjectArrayDeserializer.java:17)
at com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:523)
at com.fasterxml.jackson.databind.deser.impl.FieldProperty.deserializeAndSet(FieldProperty.java:101)
at com.fasterxml.jackson.databind.deser.impl.BeanPropertyMap.findDeserializeAndSet(BeanPropertyMap.java:285)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:248)
at com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeOther(BeanDeserializer.java:169)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:144)
at com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer._deserializeTypedForId(AsPropertyTypeDeserializer.java:124)
at com.fasterxml.jackson.databind.jsontype.impl.AsPropertyTypeDeserializer.deserializeTypedFromObject(AsPropertyTypeDeserializer.java:95)
at com.fasterxml.jackson.databind.deser.AbstractDeserializer.deserializeWithType(AbstractDeserializer.java:131)
at com.fasterxml.jackson.databind.deser.impl.TypeWrappedDeserializer.deserialize(TypeWrappedDeserializer.java:42)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3564)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2580)
at com.ntxdev.zuptecnico.storage.BaseService.getObject(BaseService.java:31)
Поскольку это приложение для Android, тема " Как бороться с ошибкой" java.lang.OutOfMemoryError: пространство кучи Java "(размер кучи 64 МБ) не работает для меня".