diff --git a/src/tools/android/java/com/google/devtools/build/android/desugar/Desugar.java b/src/tools/android/java/com/google/devtools/build/android/desugar/Desugar.java
index d033715..fe28295 100644
--- a/src/tools/android/java/com/google/devtools/build/android/desugar/Desugar.java
+++ b/src/tools/android/java/com/google/devtools/build/android/desugar/Desugar.java
@@ -21,6 +21,7 @@
 
 import com.google.auto.value.AutoValue;
 import com.google.common.annotations.VisibleForTesting;
+import com.google.common.collect.ConcurrentHashMultiset;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
 import com.google.common.collect.ImmutableSet;
@@ -70,7 +71,6 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.regex.Pattern;
 import javax.annotation.Nullable;
@@ -399,7 +399,7 @@
   private final LambdaClassMaker lambdas;
   private final GeneratedClassStore store = new GeneratedClassStore();
   private final ClassMemberUseCounter classMemberUseCounter =
-      new ClassMemberUseCounter(new ConcurrentHashMap<>());
+      new ClassMemberUseCounter(ConcurrentHashMultiset.create());
   private final Set<String> visitedExceptionTypes = new LinkedHashSet<>();
   /** The counter to record the times of try-with-resources desugaring is invoked. */
   private final AtomicInteger numOfTryWithResourcesInvoked = new AtomicInteger();
diff --git a/src/tools/android/java/com/google/devtools/build/android/desugar/langmodel/ClassMemberUseCounter.java b/src/tools/android/java/com/google/devtools/build/android/desugar/langmodel/ClassMemberUseCounter.java
index ae4051b..43133f8 100644
--- a/src/tools/android/java/com/google/devtools/build/android/desugar/langmodel/ClassMemberUseCounter.java
+++ b/src/tools/android/java/com/google/devtools/build/android/desugar/langmodel/ClassMemberUseCounter.java
@@ -16,36 +16,35 @@
 
 package com.google.devtools.build.android.desugar.langmodel;
 
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.atomic.LongAdder;
-import java.util.stream.Collectors;
+import static java.util.stream.Collectors.toCollection;
+
+import com.google.common.collect.ConcurrentHashMultiset;
 
 /** The counter used to track a class member use. */
 public final class ClassMemberUseCounter implements TypeMappable<ClassMemberUseCounter> {
 
   /** Tracks a class member with its associated count. */
-  private final ConcurrentMap<ClassMemberUse, LongAdder> memberUseCounter;
+  private final ConcurrentHashMultiset<ClassMemberUse> memberUseCounter;
 
-  public ClassMemberUseCounter(ConcurrentMap<ClassMemberUse, LongAdder> memberUseCounter) {
+  public ClassMemberUseCounter(ConcurrentHashMultiset<ClassMemberUse> memberUseCounter) {
     this.memberUseCounter = memberUseCounter;
   }
 
   /** Increases the member use count by one when an member access is encountered. */
-  public void incrementMemberUseCount(ClassMemberUse classMemberUse) {
-    memberUseCounter.computeIfAbsent(classMemberUse, k -> new LongAdder()).increment();
+  public boolean incrementMemberUseCount(ClassMemberUse classMemberUse) {
+    return memberUseCounter.add(classMemberUse);
   }
 
   /** Retrieves the total use count of a given class member. */
   public long getMemberUseCount(ClassMemberUse memberKey) {
-    return memberUseCounter.getOrDefault(memberKey, new LongAdder()).longValue();
+    return memberUseCounter.count(memberKey);
   }
 
   @Override
   public ClassMemberUseCounter acceptTypeMapper(TypeMapper typeMapper) {
     return new ClassMemberUseCounter(
-        memberUseCounter.keySet().stream()
-            .collect(
-                Collectors.toConcurrentMap(
-                    memberUse -> memberUse.acceptTypeMapper(typeMapper), memberUseCounter::get)));
+        memberUseCounter.stream()
+            .map(memberUse -> memberUse.acceptTypeMapper(typeMapper))
+            .collect(toCollection(ConcurrentHashMultiset::create)));
   }
 }
