StringBuffer.build() - a way to create strings without unnecessary allocations
Tom Hawtin
tom.hawtin at oracle.com
Thu Dec 9 01:54:51 UTC 2010
On 08/12/2010 23:03, Jaroslav Tulach wrote:
> I've been investigating the memory allocations during NetBeans start. I've
> noticed that we are allocating about 60MB of char[] mostly due to parsing of
> various configuration files. Suprisingly at least half of these 60MB is
> garbage collected quickly. This is because we use StringBuffer/Builder to
You should find that short-lived memory allocations are very well
handled. If half the memory allocations are going to be long-lived, then
the short-lived allocations should be relatively insignificant.
> That is why I decided to create my patch. It adds StringBuffer.build() method
> which can create Strings without unnecessary copying. It adds
This is how StringBuffer was implemented before 1.5. It turns out that
this is not technically thread-safe for StringBuffer, and StringBuilder
would obviously allow mutable Strings.
Also there is the problem that the StringBuffer char[] will typically be
longer than necessary, so pruning is generally a good idea.
You might find that you can reduce memory churn by retaining the same
StringBuffer object, removing the contents between uses. But this is
likely to make a mess of your code, and is unlikely to give much actual
performance improvement.
Tom
More information about the core-libs-dev
mailing list