< 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 >