code: private Set<TraceeBackendProvider> getTraceeProviderFromClassloader(
  		final Map<ClassLoader, Set<TraceeBackendProvider>> cacheCopy,
  		final ClassLoader classLoader) {
  		// use cache to get TraceeBackendProvider or empty results from old lookups
  		Set<TraceeBackendProvider> classLoaderProviders = cacheCopy.get(classLoader);
  		if (isLookupNeeded(classLoaderProviders)) {
  			classLoaderProviders = loadProviders(classLoader);
  			updatedCache(classLoader, classLoaderProviders);
  		}
  
  		return classLoaderProviders;
  	}
docs: Search for TraceeBackendProvider in the given classloader. The result is stored in a cache with the classloader
  as (weak) key. If no backendProvider could be found a special type of collection is stored in cache and is returned.
  
  @param cacheCopy   Working copy of the current cache (copy-on-write-cache)
  @param classLoader the classloader we've to search for TraceeBackendProvider
  @return A BackendProviderSet if we found at least one provider. Otherwise we return an EmptyBackendProviderSet.