< prev index next >

src/java.base/share/classes/jdk/internal/jimage/ImageLocation.java

Print this page
rev 16767 : 8175561: Memory churn in jimage code affects startup after resource encapsulation changes
Reviewed-by: jlaskey
rev 16768 : imported patch imgstr_oneup

*** 145,155 **** || name.charAt(index++) != '/') { return false; } } ! int parentOffset = (int)attributes[ATTRIBUTE_PARENT]; if (parentOffset != 0) { String parent = strings.get(parentOffset); final int parentLen = parent.length(); if (!name.regionMatches(index, parent, 0, parentLen)) { return false; --- 145,175 ---- || name.charAt(index++) != '/') { return false; } } ! return verifyName(name, index, length, attributes, strings); ! } ! ! static boolean verify(String module, String name, ! final long[] attributes, final ImageStrings strings) { ! Objects.requireNonNull(module); ! Objects.requireNonNull(name); ! int moduleOffset = (int)attributes[ATTRIBUTE_MODULE]; ! if (moduleOffset != 0) { ! if (!module.equals(strings.get(moduleOffset))) { ! return false; ! } ! } ! ! return verifyName(name, 0, name.length(), attributes, strings); ! } ! ! private static boolean verifyName(String name, int index, final int length, ! final long[] attributes, final ImageStrings strings) { ! ! int parentOffset = (int) attributes[ATTRIBUTE_PARENT]; if (parentOffset != 0) { String parent = strings.get(parentOffset); final int parentLen = parent.length(); if (!name.regionMatches(index, parent, 0, parentLen)) { return false;
*** 157,175 **** index += parentLen; if (length <= index || name.charAt(index++) != '/') { return false; } } ! ! String base = strings.get((int)attributes[ATTRIBUTE_BASE]); final int baseLen = base.length(); if (!name.regionMatches(index, base, 0, baseLen)) { return false; } index += baseLen; ! ! int extOffset = (int)attributes[ATTRIBUTE_EXTENSION]; if (extOffset != 0) { String extension = strings.get(extOffset); int extLen = extension.length(); if (length <= index || name.charAt(index++) != '.' --- 177,193 ---- index += parentLen; if (length <= index || name.charAt(index++) != '/') { return false; } } ! String base = strings.get((int) attributes[ATTRIBUTE_BASE]); final int baseLen = base.length(); if (!name.regionMatches(index, base, 0, baseLen)) { return false; } index += baseLen; ! int extOffset = (int) attributes[ATTRIBUTE_EXTENSION]; if (extOffset != 0) { String extension = strings.get(extOffset); int extLen = extension.length(); if (length <= index || name.charAt(index++) != '.'
< prev index next >