Im Rahmen einer Speicheranalyse haben wir Folgendes festgestellt:
percent live alloc'ed stack class
rank self accum bytes objs bytes objs trace name
3 3.98% 19.85% 24259392 808 3849949016 1129587 359697 byte\[\]
4 3.98% 23.83% 24259392 808 3849949016 1129587 359698 byte\[\]
Sie werden feststellen, dass viele Objekte zugewiesen werden, aber nur wenige aktiv bleiben. Dafür gibt es einen einfachen Grund: Die zwei Byte-Arrays werden für jede Instanz eines "Clients" zugewiesen, die erzeugt wird. Clients sind nicht wiederverwendbar - jeder Client kann nur eine Anfrage bearbeiten und wird dann weggeworfen. Die Byte-Arrays haben immer die gleiche Größe (30000).
Wir erwägen, einen Pool (apache's GenericObjectPool) von Byte-Arrays zu verwenden, da normalerweise die Anzahl der aktiven Clients zu jedem Zeitpunkt bekannt ist (so dass die Poolgröße nicht stark schwanken sollte). Auf diese Weise können wir bei der Speicherzuweisung und der Garbage Collection sparen. Die Frage ist, ob der Pool eine starke CPU-Belastung verursachen würde. Ist diese Idee überhaupt eine gute Idee?
Vielen Dank für Ihre Hilfe!