code: @Override
      public final V get (final Object key) {
  
          V value = null;
          final SoftReference<V> softReference = internalMap.get(key);
          if (softReference != null) {
              // Soft reference was garbage collected.
              value = softReference.get();
              if (value == null) {
                  // Reflect garbage collected soft reference in internal hash
                  // map.
                  internalMap.remove(key);
              } else {
                  synchronized (strongReferenceArray) {
                      // FIFO on strong references.
                      strongReferenceArray[currentStrongReferenceOffset++] = value;
                      // Assure FIFO does not grow beyond strongReferenceCount.
                      if (currentStrongReferenceOffset >= strongReferenceCount) {
                          currentStrongReferenceOffset = 0;
                      }
                  }
              }
          }
          return value;
      }
docs: {@inheritDoc}