2017-08-07 2 views
0

In meinem Programm ich tue:Wie abfangen Deserialisierung Jackson JsonNodes

private static final ObjectMapper MAPPER = new GridJettyObjectMapper(); 
.... 
JsonNode node = MAPPER.readTree(content); 

Meine JSON viele SAME Strings enthält, und ich würde abfangen readTree() -Methode wie und WeakHashMap setzen in TextNodes gecached Strings (mit beispielsweise).

Ich hoffe, dass dies mir eine Menge Speicher sparen wird. Für jetzt meine App nur OOME und in Heap-Dump sehe ich Millionen von gleichen Strings in TextNodes.

Irgendeine Idee, wie man das macht?

+1

Sie können '-XX: + UseStringDeduplication' als JVM-Flag für neue Versionen von Java 8 und höher verwenden. Dies wird Speicher sparen, indem die JVM die Strings nur einmal im Speicher hält. – Adam

+0

Danke, Adam. Aber ich bin auf Java 7 und kann diese Option nicht verwenden. – kuaw26

Antwort

0

Nach einiger Debug-I ersetzt

JsonNode node = MAPPER.readTree(content); 

mit

Pojo p = MAPPER.readValue(Pojo.class, new PojoDeserializer()); 

Und in PojoDeserializer Logik implementieren, die viele TextNodes nicht generieren. Ich habe JsonParser Streaming-API verwendet.

Verwandte Themen