code: private Set<String> getOrMakeJarListing(final String absolutePathToJar) {
  		synchronized (mapTrackerToJarPath) {
  			/*
  			 * 1) Check our private instance JarPath-to-Tracker Mappings:
  			 */
  			Object ourTracker = mapJarPathToTracker.get(absolutePathToJar);
  			if (ourTracker != null) {
  				/*
  				 * Yes, we are already tracking this Jar. Just return its contents...
  				 */
  				return mapTrackerToJarContents.get(ourTracker);
  			}
  			
  			/*
  			 * 2) Not tracked by us as yet. Check statically whether others have tracked this JarPath:
  			 */
  			for (Entry<Object, String> entry : mapTrackerToJarPath.entrySet()) {
  				if (entry.getValue().equals(absolutePathToJar)) {
  					/*
  					 * Yes, 3rd party is tracking this jar. We must track too, then return its contents.
  					 */
  					Object otherTracker = entry.getKey();
  					mapJarPathToTracker.put(absolutePathToJar, otherTracker);
  					return mapTrackerToJarContents.get(otherTracker);
  				}
  			}
  			
  			/*
  			 * 3) Not tracked by anyone so far. Build, publish, track & return Jar contents...
  			 */
  			Object newTracker = new Object();
  			Set<String> jarMembers = getJarMemberSet(absolutePathToJar);
  			
  			mapTrackerToJarContents.put(newTracker, jarMembers);
  			mapTrackerToJarPath.put(newTracker, absolutePathToJar);
  			mapJarPathToTracker.put(absolutePathToJar, newTracker);
  			
  			return jarMembers;
  		}
  	}
docs: This cache ensures that any given jar file is only opened once in order to determine the full contents of it.
  We use 'trackers' to make sure that the bulk of the memory taken up by this cache (the list of strings representing the content of a jar file)
  gets garbage collected if all ShadowClassLoaders that ever tried to request a listing of this jar file, are garbage collected.