Add caching for GenericVersion instances in GenericVersionScheme #1498
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
This PR implements WeakHashMap-based caching for
GenericVersioninstances inGenericVersionSchemeto improve performance while ensuring memory safety in long-running processes. The implementation provides excellent cache performance with automatic memory management.🎯 Performance Results
Tested with a 1000+ module Maven build using the reproducer, the cache demonstrates exceptional effectiveness:
🔧 Key Features
Memory-Safe Caching
Configurable Statistics
aether.util.versionScheme.cacheDebugproperty for enabling detailed statistics-Daether.util.versionScheme.cacheDebug=trueThread Safety
🚀 Benefits
🧪 Testing Methodology
The performance results were obtained using:
-T 1C)-Daether.util.versionScheme.cacheDebug=true📊 Cache Statistics Output
When statistics are enabled, the following detailed metrics are printed on shutdown:
🔄 Implementation Details
WeakHashMap vs ConcurrentHashMap
Cache Key Strategy
📁 Files Changed
maven-resolver-api/src/main/java/org/eclipse/aether/ConfigurationProperties.java- Added cache debug configurationmaven-resolver-util/src/main/java/org/eclipse/aether/util/version/GenericVersionScheme.java- WeakHashMap caching implementationmaven-resolver-util/src/test/java/org/eclipse/aether/util/version/GenericVersionSchemeTest.java- Updated tests for cachingmaven-resolver-util/src/test/java/org/eclipse/aether/util/version/GenericVersionRangeTest.java- Consistent scheme usagemaven-resolver-util/src/test/java/org/eclipse/aether/util/version/UnionVersionRangeTest.java- Shared scheme instancemaven-resolver-util/src/test/java/org/eclipse/aether/util/version/GenericVersionSchemeCachingPerformanceTest.java- Performance tests🎯 Production Impact
This optimization is particularly beneficial for:
The 99.97% hit rate demonstrates that version string reuse is extremely common in real-world Maven builds, making this cache highly effective while the WeakHashMap ensures memory safety for production deployments.
Pull Request opened by Augment Code with guidance from the PR author