Optimize `AbstractStringBuilder.replace`
Luis Ashurei
atealxt at gmail.com
Fri Feb 6 07:25:18 UTC 2015
Hello,
I'm looking into
AbstractStringBuilder java.lang.AbstractStringBuilder.replace(int start,
int end, String str)
<http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/c10fd784956c/src/share/classes/java/lang/AbstractStringBuilder.java>
There is a array copy after `ensureCapacityInternal`, it's might
unnecessary when `newCount` equals to old count (same length of
replacement).
I can see no native optimization at my box (win7+jdk1.8.0_20),
`System.arraycopy` is slow especially copy length is large.
E.g.
> StringBuilder sb = new StringBuilder();
> for (int i = 0; i < 50000; i++) {
> sb.append("sb");
> }
> char[] charArr = sb.toString().toCharArray();
> int len = charArr.length - 3;
> for (int i = 0; i < 1000000; i++) {
> sb.replace(1, 3, "xy"); // slow
> System.arraycopy(charArr, 3, charArr, 3, len); // slow
> System.arraycopy(charArr, len, charArr, len, 1); // fast
> }
Thanks,
Luis
More information about the core-libs-dev
mailing list