docs: protected boolean evictObject(Object key)
      {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
              Tr.entry(tc, "evictObject", key);
  
          Bucket bucket = getOrCreateBucketForKey(key);
          Element element = null;
  
          synchronized (this) {
              numEvictionAttempts++;
          }
  
          try
          {
              // Hold the bucket lock while calling the discard strategy.
              // The spread of keys amongst buckets should ameliorate the
              // ill-effects of holding this lock when calling a potentially
              // long running operation (eg passivation).
              synchronized (bucket)
              {
                  element = bucket.findByKey(key);
  
                  // Give another chance to the eviction strategy to decide
                  // whether it should evict an object. This time with the
                  // bucket lock held, so a more consistent decision can be
                  // reached
                  if ((element != null) &&
                      (evictionStrategy.canBeDiscarded(element)))
                  {
                      element = bucket.discardByKey(key);
  
                      if (element != null)
                      {
                          synchronized (this) {
                              numObjects--;
                              numEvictions++;
                          }
  
                          // Inform the DiscardStrategy that we just
                          // evicted an oject
                          if (discardStrategy != null) {
                              try {
                                  discardStrategy.discardObject(this, element.key,
                                                                element.object);
                              } catch (Exception ex) {
                                  FFDCFilter.processException(ex, CLASS_NAME + ".evictObject",
                                                              "863", this);
                                  Tr.warning(tc, "EXCEPTION_THROWN_BY_DISCARD_STRATEGY_CNTR0054W"
                                             , new Object[] { element, ex }); //p111002.4
                                  element = null;
                              }
                          }
                      }
                  } else {
                      element = null;
                  }
              }
  
          } catch (IllegalOperationException ex) {
              // Object is pinned and cannot be removed from the cache
              FFDCFilter.processException(ex, CLASS_NAME + ".evictObject", "878", this);
              element = null;
          } finally {
  
              if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
                  Tr.exit(tc, "evictObject", new Boolean(element != null));
          }
  
          return element != null;
      }