The heuristic for sharing String data in String.substring() can result in significant memory bloat in certain cases.
Currently, it will always share String data unless the resulting substring is <= 8 characters in size. In many applications, it seems common for the initial string to be discarded once a substring has been taken - thus it probably makes sense to share only when the substring represents a significant proportion of the original string's size. See this thread for more information: http://gcc.gnu.org/ml/java-patches/2005-q2/msg00449.html -- Summary: String.substring sharing heuristic should be improved Product: gcc Version: 4.1.0 Status: UNCONFIRMED Severity: normal Priority: P2 Component: libgcj AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: mckinlay at redhat dot com CC: gcc-bugs at gcc dot gnu dot org,java-prs at gcc dot gnu dot org http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21753