code: public boolean free(T obj)
    {
      AtomicInteger topRef = _top;
  
      while (true) {
        final int top = topRef.get();
        
        if (_capacity <= top) {
          return false;
        }
  
        boolean isFree = _freeStack.compareAndSet(top, null, obj);
        
        topRef.compareAndSet(top, top + 1);
  
        if (isFree) {
          return true;
        }
      }
    }
docs: Frees the object.  If the free list is full, the object will be garbage
  collected.
  
  @param obj the object to be freed.