plus32: diff -r 1e5cc55ae5d3 src/java.base/share/classes/java/lang/AbstractStringBuilder.java --- a/src/java.base/share/classes/java/lang/AbstractStringBuilder.java Thu Apr 23 18:01:01 2015 +0800 +++ b/src/java.base/share/classes/java/lang/AbstractStringBuilder.java Fri Apr 24 17:36:19 2015 +0300 @@ -129,9 +129,10 @@ * size check or synchronization. */ void expandCapacity(int minimumCapacity) { - int newCapacity = value.length * 2 + 2; + int newCapacity = value.length * 2; if (newCapacity - minimumCapacity < 0) newCapacity = minimumCapacity; + newCapacity += 32; // additional capacity, anticipating follow-up ops if (newCapacity < 0) { if (minimumCapacity < 0) // overflow throw new OutOfMemoryError(); mult2: --- a/src/java.base/share/classes/java/lang/AbstractStringBuilder.java Thu Apr 23 18:01:01 2015 +0800 +++ b/src/java.base/share/classes/java/lang/AbstractStringBuilder.java Fri Apr 24 17:51:32 2015 +0300 @@ -130,8 +130,8 @@ */ void expandCapacity(int minimumCapacity) { int newCapacity = value.length * 2 + 2; - if (newCapacity - minimumCapacity < 0) - newCapacity = minimumCapacity; + while (newCapacity - minimumCapacity < 0) + newCapacity = newCapacity * 2; if (newCapacity < 0) { if (minimumCapacity < 0) // overflow throw new OutOfMemoryError(); mult2-plus32: diff -r 1e5cc55ae5d3 src/java.base/share/classes/java/lang/AbstractStringBuilder.java --- a/src/java.base/share/classes/java/lang/AbstractStringBuilder.java Thu Apr 23 18:01:01 2015 +0800 +++ b/src/java.base/share/classes/java/lang/AbstractStringBuilder.java Fri Apr 24 17:39:39 2015 +0300 @@ -129,9 +129,10 @@ * size check or synchronization. */ void expandCapacity(int minimumCapacity) { - int newCapacity = value.length * 2 + 2; - if (newCapacity - minimumCapacity < 0) - newCapacity = minimumCapacity; + int newCapacity = value.length * 2; + while (newCapacity - minimumCapacity < 0) + newCapacity = newCapacity * 2; + newCapacity += 32; // additional capacity, anticipating follow-up ops if (newCapacity < 0) { if (minimumCapacity < 0) // overflow throw new OutOfMemoryError(); plus32-round8: diff -r 1e5cc55ae5d3 src/java.base/share/classes/java/lang/AbstractStringBuilder.java --- a/src/java.base/share/classes/java/lang/AbstractStringBuilder.java Thu Apr 23 18:01:01 2015 +0800 +++ b/src/java.base/share/classes/java/lang/AbstractStringBuilder.java Tue May 05 11:22:22 2015 +0300 @@ -129,9 +125,13 @@ * size check or synchronization. */ void expandCapacity(int minimumCapacity) { - int newCapacity = value.length * 2 + 2; + int newCapacity = value.length * 2; if (newCapacity - minimumCapacity < 0) newCapacity = minimumCapacity; + + // Expect follow-up ops: add a padding. + // It is also nicer to array copy to make the storage round. + newCapacity = (newCapacity + 32) & ~8; if (newCapacity < 0) { if (minimumCapacity < 0) // overflow throw new OutOfMemoryError();