diff options
Diffstat (limited to 'libjava/java/lang/StringBuffer.java')
-rw-r--r-- | libjava/java/lang/StringBuffer.java | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/libjava/java/lang/StringBuffer.java b/libjava/java/lang/StringBuffer.java index 4127d54787f..70f78fbf8e5 100644 --- a/libjava/java/lang/StringBuffer.java +++ b/libjava/java/lang/StringBuffer.java @@ -98,7 +98,13 @@ public final class StringBuffer implements Serializable { if (shared || minimumCapacity > value.length) { - minimumCapacity = Math.max(minimumCapacity, value.length*2+2); + // We don't want to make a larger vector when `shared' is + // set. If we do, then setLength becomes very inefficient + // when repeatedly reusing a StringBuffer in a loop. + int max = (minimumCapacity > value.length + ? value.length*2+2 + : value.length); + minimumCapacity = Math.max(minimumCapacity, max); char[] nb = new char[minimumCapacity]; System.arraycopy(value, 0, nb, 0, count); value = nb; |