[ https://issues.apache.org/jira/browse/MNG-7659?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17653824#comment-17653824 ]
Andrzej Jarmoniuk edited comment on MNG-7659 at 1/3/23 7:55 PM: ---------------------------------------------------------------- I think it should be safe on condition that the cached objects are immutable. ~~ComparableVersion is effectively immutable (not stated in the contract, but has no mutating API). And the cache is basically the lookup table between the constructor argument and its value.~~ Neither ComparableVersion nor DefaultArtifactVersion are immutable: {{parseVersion}} will mutate their state. If this is the case, they mustn't be cached. Unless the API is changed, but I doubt that is likely. [~sjaranowski] what do you think? was (Author: ajarmoniuk): I think it should be safe on condition that the cached objects are immutable. ComparableVersion is effectively immutable (not stated in the contract, but has no mutating API). And the cache is basically the lookup table between the constructor argument and its value. [~sjaranowski] what do you think? > ComparableVersion cache > ----------------------- > > Key: MNG-7659 > URL: https://issues.apache.org/jira/browse/MNG-7659 > Project: Maven > Issue Type: Improvement > Affects Versions: 3.8.7 > Reporter: Andrzej Jarmoniuk > Priority: Minor > > Tobias Gruetzmacher has raised an issue with Versions Maven Plugin - > [Performance issue with many versions/artifacts > #869|https://github.com/mojohaus/versions/issues/869], where he points out > that we're creating lots of ComparableVersion objects (which happens > especially during ArtifactVersion comparison), which affects performance. He > proposed creating a simple cache for these objects. > This proved to increase performance in some Versions Maven Plugin jobs almost > twofold. > What do you guys think of introducing this to Maven? > The cache should probably be restricted in size (e.g. use LRUMap from commons > collections), so that it won't leak memory when used with mvnd. > Simple implementation is here: https://github.com/mojohaus/versions/pull/870 > Using LRUMap: https://github.com/mojohaus/versions/pull/893 > The cache could alternatively be owned by DefaultArtifactVersion, where the > construction of ComparableVersion is taking place. > I'm querying for opinions on this; if this gains approval, I could implement > it. Ultimately I'd like to get rid of the ComparableVersion duplicate in > Versions Maven Plugin. -- This message was sent by Atlassian Jira (v8.20.10#820010)