< 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,11 +145,31 @@
|| name.charAt(index++) != '/') {
return false;
}
}
- int parentOffset = (int)attributes[ATTRIBUTE_PARENT];
+ 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,19 +177,17 @@
index += parentLen;
if (length <= index || name.charAt(index++) != '/') {
return false;
}
}
-
- String base = strings.get((int)attributes[ATTRIBUTE_BASE]);
+ 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];
+ 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 >