You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by cs...@apache.org on 2022/04/12 16:44:21 UTC

[maven-resolver] 01/01: [MRESOLVER-250] Wrap descriptors into weak refs

This is an automated email from the ASF dual-hosted git repository.

cstamas pushed a commit to branch MRESOLVER-250-weakref-descriptors
in repository https://gitbox.apache.org/repos/asf/maven-resolver.git

commit a614d46d0320cd02c2d1b22b72658fe6d2689070
Author: Tamas Cservenak <ta...@cservenak.net>
AuthorDate: Tue Apr 12 18:43:37 2022 +0200

    [MRESOLVER-250] Wrap descriptors into weak refs
    
    Yet to be proven the memory usage change.
---
 .../org/eclipse/aether/internal/impl/collect/DataPool.java   | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DataPool.java b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DataPool.java
index 04ebdf41..a9f5aa86 100644
--- a/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DataPool.java
+++ b/maven-resolver-impl/src/main/java/org/eclipse/aether/internal/impl/collect/DataPool.java
@@ -19,6 +19,7 @@ package org.eclipse.aether.internal.impl.collect;
  * under the License.
  */
 
+import java.lang.ref.WeakReference;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
@@ -66,7 +67,7 @@ public final class DataPool
 
     private ObjectPool<Dependency> dependencies;
 
-    private Map<Object, Descriptor> descriptors;
+    private Map<Object, WeakReference<Descriptor>> descriptors;
 
     private final Map<Object, Constraint> constraints = new HashMap<>();
 
@@ -81,7 +82,7 @@ public final class DataPool
         {
             artifacts = (ObjectPool<Artifact>) cache.get( session, ARTIFACT_POOL );
             dependencies = (ObjectPool<Dependency>) cache.get( session, DEPENDENCY_POOL );
-            descriptors = (Map<Object, Descriptor>) cache.get( session, DESCRIPTORS );
+            descriptors = (Map<Object, WeakReference<Descriptor>>) cache.get( session, DESCRIPTORS );
         }
 
         if ( artifacts == null )
@@ -129,7 +130,8 @@ public final class DataPool
 
     public ArtifactDescriptorResult getDescriptor( Object key, ArtifactDescriptorRequest request )
     {
-        Descriptor descriptor = descriptors.get( key );
+        WeakReference<Descriptor> descriptorRef = descriptors.get( key );
+        Descriptor descriptor = descriptorRef != null ? descriptorRef.get() : null;
         if ( descriptor != null )
         {
             return descriptor.toResult( request );
@@ -139,12 +141,12 @@ public final class DataPool
 
     public void putDescriptor( Object key, ArtifactDescriptorResult result )
     {
-        descriptors.put( key, new GoodDescriptor( result ) );
+        descriptors.put( key, new WeakReference<>( new GoodDescriptor( result ) ) );
     }
 
     public void putDescriptor( Object key, ArtifactDescriptorException e )
     {
-        descriptors.put( key, BadDescriptor.INSTANCE );
+        descriptors.put( key, new WeakReference<>( BadDescriptor.INSTANCE ) );
     }
 
     public Object toKey( VersionRangeRequest request )