2 Stimmen

Wiederholte Zuweisung von Byte-Arrays gleicher Größe, ersetzen durch Pools?

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!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X