private void addHashEntry(
     final AtomicReferenceArray<ClassInfoEntry> hashTable, final ClassInfo ci) {
   final int hh = ci.getHandle() % hashTable.length();
   final int nh =
       ci.getDescribedClass() == null
           ? -1
           : ((ci.getDescribedClass().getName().hashCode() & 0x7FFFFFFF) % hashTable.length());
   boolean added = addHashEntry(hashTable, ci, hh);
   if (nh != -1 && nh != hh) {
     added |= addHashEntry(hashTable, ci, nh);
   }
   if (!added) {
     _discardedDuplicates.incrementAndGet();
   }
 }
 private boolean addHashEntry(
     final AtomicReferenceArray<ClassInfoEntry> hashTable, final ClassInfo ci, final int hash) {
   ClassInfoEntry cie = hashTable.get(hash);
   while (cie != null) {
     if (ci.equals(cie._classInfo)) {
       return false;
     }
     cie = cie._next;
   }
   cie = hashTable.get(hash);
   final ClassInfoEntry newCie = new ClassInfoEntry(ci, cie);
   hashTable.set(hash, newCie);
   _size.incrementAndGet();
   return true;
 }