私はバーストでログインし、データパスを最適化するためにたくさんのものを書いています。私はStringBuilder
でログテキストを構築します。何が最も効率的な初期容量、メモリ管理が賢明なので、それはJVMに関係なくうまくいくでしょうか?目標は、ほとんどの場合、80〜100程度の初期容量でカバーする必要があります再割り当てを避けることです。しかし、私はまた、StringBuilderインスタンスがバッファー内でハングアップする可能性があり、無駄なバイトが詰まるので、できるだけ少ないバイト数を無駄にしたい。StringBuilderの最も効率的な初期容量サイズですか?
私はこれがJVMに依存していることを認識していますが、JVMにかかわらず最小のバイトを無駄にする価値があるはずです。私は現在、128-16
を使用しています。ここで128は素敵な丸数字で、減算は割り当てオーバーヘッドです。また、これは "時期尚早の最適化"のケースと考えられますが、私が後にしている答えは "親しみ感のあるルール"なので、将来的にも役立つことがわかっています。
「私の最高の推測」の回答は期待していません(自分の答えはすでにそれです)。誰かがこれを既に調査して知識ベースの回答を共有してくれることを願っています。
この質問への回答は、例えば、テキストが「StringBuilder」などにどれくらい保存されているかなど、多くのことに依存します。メモリやCPUプロファイラを使用してmeasureを調べる唯一の方法があります。数十万の 'StringBuilder'オブジェクトを作成しない限り、数バイトを心配する必要はありません。 – Jesper
これまでの最大のオーバーヘッドはIOのコストです。このデータをIOに書き込むつもりがない限り、私はそれを心配しません。 –