code: public void free (T object) {
  		if (object == null) throw new IllegalArgumentException("object cannot be null.");
  
  		reset(object);
  
  		if (!freeObjects.offer(object) && freeObjects instanceof SoftReferenceQueue) {
  			((SoftReferenceQueue)freeObjects).cleanOne();
  			freeObjects.offer(object);
  		}
  		peak = Math.max(peak, freeObjects.size());
  	}
docs: Puts the specified object in the pool, making it eligible to be returned by {@link #obtain()}. If the pool already contains
  the maximum number of free objects, the specified object is reset but not added to the pool.
  <p>
  If using soft references and the pool contains the maximum number of free objects, the first soft reference whose object has
  been garbage collected is discarded to make room.