Islands in the byte stream

Technical notes by a software engineer

android.support.v4.util.PoolsでStringBuilderをプールしても意味なし

Pools | Android Developers

これがちょっと気になっていて、たとえば new StringBuilder() を数多く実行するケースでもしかしたら速くなるのでは?と思って試してみました。

10万回のStringBuilderを生成して文字列連結などをしています。

StringBuilderPool/MainActivity.java at master · gfx/StringBuilderPool · GitHub

しかし結果は以下のとおり、4.2.2だと多少の効果はありますが、ARTだと逆に遅くなります。今後はARTが増えていくので、StringBuilder 程度だと気にする必要はありません。そういうわけで、「もしかしたらここはPoolsで速くなるかも…」などと心配せず、安心して使うたびに new StringBuilder() したり文字列リテラルとの連結をしてください。

// MainActivity.java 内のメモ

// on Xperia A (Android 4.2.2)
// D/XXX: SimplePool: 294ms
// D/XXX: SynchronizedPool: 341ms
// D/XXX: No pool: 382ms
//
// on Xperia Z4 (Android 5.0.2)
// D/XXX: SimplePool: 152ms
// D/XXX: SynchronizedPool: 153m
// D/XXX: No pool: 116ms