Быть может, дело не только (не столько?) в memory consumption, но в multithreading - скопировал и голова не болит по поводу синхронизации, кэшей и т.д.?Интеррапт wrote:до Java 7 (вернее даже до какого-то из апдейтов к Java 7) при вызове substring - новая строка использовала символьный буфер (char[]) от родительской строки (за счет использования offset/count полей в String). В новых версиях семерки (включая Java 8 ес-но тоже) - offset/count поля вообще убрали и теперь substring всегда создает копию символьного буфера. В большинстве случаев это конечно хорошо для memory consumption...
(К Java никакого отношения не имею, так, исключительно догадка из общих соображений.)