Comment by shagie
3 years ago
The first issue I tackled at one of the jobs I had was slow JSP page performance.
The code had some sizable chunks of JavaScript in Strings and looked at each authorization the user had. Its been awhile, but in dynamically generating that JavaScript (ICK!) it generated several megabytes of garbage Strings by doing `script = script + "little bit more";` way too many times. This was done for each page load. 8am and hundreds of people click the page to get their start of day stuff... and... server has problems.
That particular issue was fixed by changing it all to a StringBuilder.
I've yet to see any sloppy garbage creating that is on the same order of magnitude as that JSP was.
Must have been a long time ago. It's been almost a decade since that code pattern started getting compiled into calls to StringBuilder by javac.
It does... but only in one statement.
That is under the covers...
But... if you do:
that becomes
So, you've still created the strings: "foo", "foobar", and "foobarqux" and also a pair of StringBuilders.
The actual code was more complicated (and bigger strings), but the issue is that each statement is its own StringBuilder.
That prompted me to explore it and I looked at the byte code invocations at http://shagie.net/2014/08/17/what-goes-on-behind-the-scenes-...