< prev index next >

src/java.base/share/classes/jdk/internal/module/SystemModuleFinder.java

Print this page
rev 16336 : 8171373: Reduce copying during initialization of ModuleHashes
Reviewed-by: alanb, mchung, chegar

*** 122,132 **** // maps module name to module reference private final Map<String, ModuleReference> nameToModule; // module name to hashes ! private final Map<String, byte[]> hashes = new HashMap<>(); private SystemModuleFinder() { String[] names = moduleNames(); int n = names.length; moduleCount.add(n); --- 122,132 ---- // maps module name to module reference private final Map<String, ModuleReference> nameToModule; // module name to hashes ! private final Map<String, byte[]> hashes; private SystemModuleFinder() { String[] names = moduleNames(); int n = names.length; moduleCount.add(n);
*** 160,175 **** --- 160,187 ---- recordedHashes[i] = attrs.recordedHashes(); moduleResolutions[i] = attrs.moduleResolution(); } } + Map<String, byte[]> hashes = null; + boolean secondSeen = false; // record the hashes to build HashSupplier for (ModuleHashes mh : recordedHashes) { if (mh != null) { + // if only one module contain ModuleHashes, use it + if (hashes == null) { + hashes = mh.hashes(); + } else { + if (!secondSeen) { + hashes = new HashMap<>(hashes); + secondSeen = true; + } hashes.putAll(mh.hashes()); } } + } + this.hashes = (hashes == null) ? Map.of() : hashes; ModuleReference[] mods = new ModuleReference[n]; @SuppressWarnings(value = {"rawtypes", "unchecked"}) Entry<String, ModuleReference>[] map
< prev index next >