docs: @Override
      public int unpin(Object key)
      {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              Tr.entry(tc, "unpin", key);
  
          int remaining = 0; // LI3408
          Bucket bucket = getOrCreateBucketForKey(key); // d739870
  
          synchronized (bucket) {
              Element element = bucket.findByKey(key);
  
              if (element == null) {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                      Tr.exit(tc, "unpin - throw NoSuchObjectException"); // d173022.12
                  throw new NoSuchObjectException(key);
              }
  
              if (element.pinned < 1) {
                  if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                      Tr.exit(tc, "unpin - throw IllegalOperationException"); // d173022.12
                  throw new IllegalOperationException(key, element.pinned);
              }
  
              element.pinned--;
              remaining = element.pinned; // LI3408
  
              // Touch the LRU flag; since an object cannot be evicted when
              // pinned, this is the only time when we bother to set the
              // flag
              element.accessedSweep = numSweeps; // d115046
          }
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              Tr.exit(tc, "unpin:" + remaining);
  
          return remaining; // LI3408
      }