Created PR to remove AbstractStringBuilder.MAX_ARRAY_SIZE -
https://github.com/openjdk/jdk/pull/5878
BTW, I found one more place where Integer.MAX_VALUE is used as maximum
array length -
java.util.concurrent.ScheduledThreadPoolExecutor.DelayedWorkQueue#grow
I think this method could be reworked
> On 9 Oct 2021, at 13:07, Pavel Rappo wrote:
>
>
>
> Separately, java.lang.AbstractStringBuilder#MAX_ARRAY_SIZE seems unused; I
> wonder how that happened.
I found what happened:
$ git log -S "MAX_ARRAY_SIZE" --
src/java.base/share/classes/java/lang/AbstractStringBuilder.java
commit
This error has two causes. The first cause is that the VM cannot allocate
arrays whose length exceeds Integer.MAX_VALUE - 8 (MAX_ARRAY_SIZE). The second
cause is that Arrays.deepToString tries to pre-allocate 20 chars per string
representation for each array element and maxes out at
Hello.
I came across unexpected behaviour of Arrays.deepToString method.
It throws OOM even on non-huge arrays.
For example this code:
int size = Integer.MAX_VALUE / 19;
Integer[] integers = new Integer[size];
Arrays.fill(integers, 0);