RFR: 8375580: Avoid using ArrayDeque in jdk.internal.loader.URLClassPath [v4]
Jaikiran Pai
jpai at openjdk.org
Mon Jan 26 16:23:31 UTC 2026
On Mon, 26 Jan 2026 14:04:28 GMT, Eirik Bjørsnøs <eirbjo at openjdk.org> wrote:
>> Please review this PR which proposes we replace `j.u.ArrayDeque` with `j.u.ArrayList` in `jdk.internal.loader.URLClassPath`.
>>
>> The motivation for using a double-ended queue may have been that "original" search path URLs are added to the tail of the queue while any URLs discovered during JAR `Class-Path` expansion are inserted at the head such that they are processed first.
>>
>> By splitting these two concerns and processing loader discovered class path URLs separately from the original search path, we no longer need a double-ended queue. We can replace `ArrayDeque` with `ArrayList`.
>>
>> Advantages:
>>
>> * A "hello world" Java program no longer loads `ArrayDeque`, `Deque` and `Queue` (`URLClassPath` is the only consumer of these classes during startup using a directory class path)
>> * One data structure is simpler than two
>> * We no longer need to manage search path URLs across two different collections
>> * Code and comments to dance around `ArrayDeque` calling into lambda too early is no longer a concern and can be removed
>> * I think this PR leaves the code overall simpler and easier to follow.
>>
>> Testing:
>>
>> This PR introduces a new test to verify that URLs disovered via a multi-level tree paths discovered via `Class-Path` JAR attributes are found in the expected DFS order. The ordering aspect seems to lack existing coverage.
>
> Eirik Bjørsnøs has updated the pull request incrementally with two additional commits since the last revision:
>
> - Remove @bug tag, no product bug discovered
> - Rename test and deemphasize DFS is comments
The changes look OK to me. I've run some manual tests locally to verify that the ordering hasn't changed after this change. I'll run tier testing in our CI and approve this PR once that comes back fine.
-------------
PR Review: https://git.openjdk.org/jdk/pull/29288#pullrequestreview-3706837528
More information about the core-libs-dev
mailing list