In den meisten meiner Klassen (insbesondere Server-Ressourcen) tendiere ich dazu, bei Bedarf neue Instanzen von com.google.gson.Gson
zu erstellen. Manchmal erstelle ich sie mit dem Standardkonstruktor (für die Handhabung von einfachen POJOs), manchmal verwende ich komplexere Varianten, die mit dem benutzerdefinierten com.google.gson.GsonBuilder
erstellt wurden.
Ich weiß, dass Gson
eine threadsafe-Klasse ist, also ist nichts dagegen, dieselbe Instanz von Gson
wiederzuverwenden, anstatt neue zu erstellen. Verdammt, ich könnte sogar eine statische Konstante dafür wiederverwenden!
Meine Frage lautet: Soll ich neue Instanzen erstellen, wann immer ich sie brauche, oder soll ich nur eine erstellen und verwenden? Welche Art von Auswirkungen auf die Leistung habe ich, wenn ich einfache POJO mit einer Gson
-Instanz serialisiert, die mit GsonBuilder
erstellt wurde und wie komplexere Datenstrukturen analysiert werden (wenn nur wenige benutzerdefinierte Serialisierer registriert wurden)?
Ich weiß, dass dies eine alte Frage ist, aber für eine zukünftige Bezugnahme ist die Antwort auf diese Frage, dass Sie für die einzelne Instanz gehen sollten, wenn es möglich ist.
Die Erstellung eines GSON-Objekts ist teuer, abhängig davon, wie viele benutzerdefinierte Deserializer / Serializer / Handler Sie registrieren. Ich bezweifle, dass Sie dadurch einen großen Leistungsschub sehen werden.
Zur zweiten Frage hat GSON intern eine Liste von registrierten Serialisierern, und jede wird mit dem Objekt verglichen, das Sie analysieren wollen. Sie werden also jedes Mal, wenn Sie einen benutzerdefinierten Serializer registrieren, weitere Iterationen hinzufügen, aber dies ist wiederum kein großes Leistungsproblem im Vergleich zu einigen großen, schwerfälligen Objekten im Speicher.