@Override
  public @NotNull String valueOf(int nameId) throws IOException {
    assert nameId > 0 : nameId;

    if (TRACK_STATS) {
      requestsCount.incrementAndGet();
    }

    int mruCacheEntryIndex = nameId % MRU_CACHE_SIZE;
    IntObjectLRUMap.MapEntry<String> entry = mruCache[mruCacheEntryIndex];
    if (entry != null && entry.key == nameId) {
      return entry.value;
    }

    if (TRACK_STATS) {
      fastCacheMissesCount.incrementAndGet();
    }

    final int stripe = calcStripeIdFromNameId(nameId);
    IntSLRUCache<String> cache = cacheSegments[stripe];
    //noinspection SynchronizationOnLocalVariableOrMethodParameter
    synchronized (cache) {
      entry = cache.getCachedEntry(nameId);
    }
    if (entry == null) {
      if (TRACK_STATS) {
        totalCacheMissesCount.incrementAndGet();
      }

      String name = namesEnumerator.valueOf(nameId);
      if (name == null) {
        throw new IOException("VFS name enumerator corrupted: nameId(=" + nameId + ") is not found in enumerator (=null)");
      }

      entry = cacheData(name, nameId, stripe);
    }
    mruCache[mruCacheEntryIndex] = entry;
    return entry.value;
  }
@Override
  public @NotNull String valueOf(int nameId)