public Collection<V> values() {
        processQueue();
        Collection<K> keys = map.keySet();
        if (keys.isEmpty()) {
            //noinspection unchecked
            return Collections.EMPTY_SET;
        }
        Collection<V> values = new ArrayList<V>(keys.size());
        for (K key : keys) {
            V v = get(key);
            if (v != null) {
                values.add(v);
            }
        }
        return values;
    }
Traverses the ReferenceQueue and removes garbage-collected SoftValue objects from the backing map
by looking them up using the SoftValue.key data member.
src/main/java/org/apache/shiro/lang/util/SoftHashMap.java