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;
    }
  }
}

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 ; } } }
frees the object . if the free list is full , the object will be garbage collected .
