franz1981 commented on a change in pull request #2645: ARTEMIS-2321 Paging 
scalability and GC improvement
URL: https://github.com/apache/activemq-artemis/pull/2645#discussion_r279261506
 
 

 ##########
 File path: 
artemis-core-client/src/main/java/org/apache/activemq/artemis/utils/SoftValueLongObjectHashMap.java
 ##########
 @@ -21,26 +21,26 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Comparator;
-import java.util.HashMap;
-import java.util.HashSet;
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
-import java.util.concurrent.atomic.AtomicLong;
 
+import io.netty.util.collection.LongObjectHashMap;
+import io.netty.util.collection.LongObjectMap;
 import org.jboss.logging.Logger;
 
-public class SoftValueHashMap<K, V extends SoftValueHashMap.ValueCache> 
implements Map<K, V> {
+public class SoftValueLongObjectHashMap<V extends 
SoftValueLongObjectHashMap.ValueCache> implements LongObjectMap<V> {
 
-   private static final Logger logger = 
Logger.getLogger(SoftValueHashMap.class);
+   private static final Logger logger = 
Logger.getLogger(SoftValueLongObjectHashMap.class);
 
    // The soft references that are already good.
    // too bad there's no way to override the queue method on ReferenceQueue, 
so I wouldn't need this
    private final ReferenceQueue<V> refQueue = new ReferenceQueue<>();
 
-   private final Map<K, AggregatedSoftReference> mapDelegate = new HashMap<>();
+   private final LongObjectMap<AggregatedSoftReference<V>> mapDelegate = new 
LongObjectHashMap<>();
 
 Review comment:
   But I wanted to avoid the boxing/unboxing cost: the page cache (that uses 
this soft value map) is sensible to GC cycles and the more is your allocation 
rate, the more likely you will have a minor GC, making the cache to clean some 
of its entries...
   Avoiding boxing/unboxing is just a way to let the entries stays much longer 
and makes this map more effective.
   TBH I don't know (the details I mean) why we are using a soft value map 
here: I would have used a LRU map instead with a fixed size of entries instead 
like 
https://github.com/real-logic/agrona/blob/master/agrona/src/main/java/org/agrona/collections/IntLruCache.java
 : need to ask @clebertsuconic about it...

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


With regards,
Apache Git Services

Reply via email to