[PATCH] Optimization of AbstractStringBuilder.ensureCapacityInternal()
Roman Leventov
leventov.ru at gmail.com
Thu Feb 22 17:23:56 UTC 2018
Similar optimizations are also possible in ArrayList and Vector.
On 22 February 2018 at 17:51, Roman Leventov <leventov.ru at gmail.com> wrote:
> AbstractStringBuilder.ensureCapacityInternal() doesn't need to copy the
> whole underlying array, only the part until the current count.
>
> diff --git a/src/java.base/share/classes/java/lang/AbstractStringBuilder.java
> b/src/java.base/share/classes/java/lang/AbstractStringBuilder.java
> --- a/src/java.base/share/classes/java/lang/AbstractStringBuilder.java
> +++ b/src/java.base/share/classes/java/lang/AbstractStringBuilder.java
> @@ -140,11 +140,12 @@
> * overflow, this method throws {@code OutOfMemoryError}.
> */
> private void ensureCapacityInternal(int minimumCapacity) {
> + byte[] oldValue = value;
> // overflow-conscious code
> - int oldCapacity = value.length >> coder;
> + int oldCapacity = oldValue.length >> coder;
> if (minimumCapacity - oldCapacity > 0) {
> - value = Arrays.copyOf(value,
> - newCapacity(minimumCapacity) << coder);
> + value = new byte[newCapacity(minimumCapacity) << coder];
> + System.arraycopy(oldValue, 0, value, 0, count << coder);
> }
> }
>
More information about the core-libs-dev
mailing list