void push(T o) {
            if (map.put(o, Boolean.TRUE) != null) {
                throw new IllegalStateException("recycled already");
            }

            int size = this.size;
            if (size == elements.length) {
                T[] newElements = newArray(size << 1);
                System.arraycopy(elements, 0, newElements, 0, size);
                elements = newElements;
            }

            elements[size] = o;
            this.size = size + 1;
        }
Light-weight object pool based on a thread-local stack.

@param <T> the type of the pooled object
lts-core/src/main/java/com/github/ltsopensource/core/commons/utils/Recycler.java