On Fri, 20 Feb 2026 13:22:40 GMT, Eirik Bjørsnøs <[email protected]> wrote:
>> src/java.base/share/classes/jdk/internal/loader/NativeLibraries.java line
>> 488:
>>
>>> 486: new Function<>() {
>>> 487: public List<NativeLibraryImpl> apply(Thread t)
>>> {
>>> 488: return new ArrayList<>(8);
>>
>> The `ArrayDeque()` constructor takes the number of "elements" whereas
>> `ArrayList()` constructor takes the initial capacity. Having said that, I
>> can't see why this `8` was used in the first place. It was introduced in
>> https://bugs.openjdk.org/browse/JDK-8228336 and the review thread
>> https://mail.openjdk.org/pipermail/core-libs-dev/2020-March/065194.html
>> doesn't make a mention of it, so this initial number of elements may not be
>> too critical in this code. If we are going to change this to an ArrayList,
>> maybe we should just change this to `new ArrayList<>()`.
>>
>> It would be good to hear from Alan @AlanBateman about this proposed change.
>
>> The `ArrayDeque()` constructor takes the number of "elements" whereas
>> `ArrayList()` constructor takes the initial capacity.
>
> They both seem to allocate Object arrays to fit elements. ArrayList makes an
> array for 8 objects, ArrayDeque 8 + 1.
>
>> Having said that, I can't see why this `8` was used in the first place.
>
>
>> If we are going to change this to an ArrayList, maybe we should just change
>> this to new ArrayList<>().
>
> Sounds reasonable, that would allow `isEmpty()` checks on an empty list to
> avoid allocation. If that matters.
> It would be good to hear from Alan @AlanBateman about this proposed change.
It looks okay but fragile in the sense that ArrayDeque is widely used, it's
just a question on when rather if it will be loaded. With going work on AOT and
in Leyden then I hope we can be less concerned about doing these kinds of
changes.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/29432#discussion_r2835988721