Это - компромисс. Строки входят в строковый пул и когда Вы создаете несколько идентичных строк, они совместно используют ту же память. Разработчики полагали, что этот метод сохранения памяти будет работать хорошо на общий падеж, так как программы имеют тенденцию стачиваться по тем же строкам много.
оборотная сторона - то, что конкатенации делают много дополнительных строк, которые являются только переходными и просто становятся мусором, на самом деле вредя производительности памяти. У Вас есть StringBuffer и StringBuilder (в Java, StringBuilder находится также в.NET) использовать для сохранения памяти в этих случаях.
Только что видел этот букмарклет для внедрения jQuery в другой поток