public void putAll(Map<? extends K, ? extends V> m) {
        if (m == null || m.isEmpty()) {
            processQueue();
            return;
        }
        for (Map.Entry<? extends K, ? extends V> entry : m.entrySet()) {
            put(entry.getKey(), entry.getValue());
        }
    }
Traverses the ReferenceQueue and removes garbage-collected SoftValue objects from the backing map
by looking them up using the SoftValue.key data member.
lang/src/main/java/org/apache/shiro/lang/util/SoftHashMap.java