code: public final T allocate()
    {
      AtomicInteger topRef = _top;
      
      while (true) {
        final int top = topRef.get();
  
        if (top <= 0) {
          return null;
        }
        else if (topRef.compareAndSet(top, top - 1)) {
          T value = _freeStack.getAndSet(top - 1, null);
          
          if (value != null) {
            return value;
          }
        }
      }
    }
docs: Try to get an object from the free list.  Returns null if the free list
  is empty.
  
  @return the new object or null.