IMO LinkedHashSet can work, no need to use LinkedHashMap directly...
but I still think it better to see the bottle-neck through real-world
running. so let's just find some really biggy open source java projects
using maven(if can't, maybe we have to craft one?)


Martin Desruisseaux <martin.desruisse...@geomatys.com> 于2025年5月28日周三
03:52写道:

> Hello
>
> Le 2025-05-26 à 22 h 55, Sergey Chernov a écrit :
>
> > Just tried the 4.0.0-rc-3 comparing with 3.9.9, it's 4x times slower
> > (!) on a project of ~900 modules (700 of them are jar).
> >
> Regarding performance, some months ago I noticed that Maven contains
> loops over elements of a list with a call to `List.contains(…)` inside
> the loop. Because `List.contains(…)` itself iterates over the elements,
> we implicitly have nested loops, which have a performance cost of O(N²)
> where N is the number of elements. Replacing some `ArrayList` by
> `LinkedHashMap` may change some O(N²) operations into O(N) operations.
> The difference between O(N) and O(N²) is unnoticeable when N is small (I
> guess that this is the case of Maven's test suite). But when N become
> large enough, the difference between O(N) or O(N²) can become the
> difference between completing an operation in a few minutes or requiring
> the age of the univers.
>
> I did not verified if Maven 4 has more nested loops than Maven 3.
> Neither I verified if the nested loops happen in algorithms where N can
> possibly be large. We do not need (neither we should) replace all
> `ArrayList` by `LinkedHashMap`. However, I'm not sure if we have
> investigated where such replacements should be done. We may not be able
> to do this investigation now, but we could keep the door open for future
> performance improvements by replacing `List` by `Collection` in the API.
> Even if the implementation stay `ArrayList` for now, it would allow us
> to replace some of them by `LinkedHashMap` in the future if we identify
> that it could bring a performance benefit.
>
> However, an objection to this proposal was that the order of elements
> matter. We had no good solution in Java 17. But if the upgrade to Java
> 21, proposed in a separated thread, is accepted, Maven could replace all
> methods returning `java.util.List` by methods returning
> `java.util.SequencedCollection` in the API. No change in the
> implementation would be done at this stage (we keep the current
> `ArrayList`), but a future Maven version would have more flexibility for
> addressing the O(N²) kind of bottleneck, if any.
>
>      Martin
>
>

Reply via email to