Ich schreibe viele Sachen, um Bursts einzuloggen und den Datenpfad zu optimieren. Ich baue den Log-Text mit StringBuilder
. Was wäre die effizienteste Anfangskapazität, Speicherverwaltung, also würde es unabhängig von JVM gut funktionieren? Ziel ist es, eine Umverteilung fast immer zu vermeiden, die durch eine Anfangskapazität von etwa 80-100 gedeckt werden sollte. Aber ich möchte auch so wenig Bytes wie möglich verschwenden, da die StringBuilder-Instanz im Puffer hängen bleiben kann und verschwendet Bytes auftauchen.Die effizienteste anfängliche Kapazitätsgröße für StringBuilder?
Ich weiß, dies hängt von JVM ab, aber es sollte einen Wert geben, der kleinste Bytes verschwenden würde, unabhängig von der JVM, eine Art "kleinster gemeinsamer Nenner". Ich verwende derzeit 128-16
, wobei die 128 eine nette runde Zahl ist, und die Subtraktion ist für den Overhead der Zuweisung. Dies könnte auch als "vorzeitige Optimierung" betrachtet werden, aber da es sich bei der Antwort um eine "Daumenregel" handelt, weiß man, dass sie auch in Zukunft nützlich sein wird.
Ich erwarte nicht "meine beste Vermutung" Antworten (meine eigene Antwort oben ist schon das), ich hoffe, jemand hat dies bereits recherchiert und kann eine wissensbasierte Antwort teilen.
Der Hinweis auf diese Frage hängt von vielen Dingen ab, zB wie lange der Text in einem 'StringBuilder' gespeichert wird etc. Die einzige Möglichkeit dies herauszufinden ist Messen mit einem Speicher- und/oder CPU-Profiler. Es gibt keinen Grund, sich um ein paar Bytes zu sorgen, es sei denn, Sie erstellen Hunderttausende von StringBuilder-Objekten. – Jesper
Mit Abstand der größte Aufwand sind die Kosten von IO. Sofern Sie nicht vorhaben, diese Daten in IO zu schreiben, würde ich mir darüber keine Sorgen machen. –