< prev index next >
src/java.base/share/classes/jdk/internal/jimage/BasicImageReader.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
@@ -247,15 +247,35 @@
public ImageStringsReader getStrings() {
return stringsReader;
}
- public ImageLocation findLocation(String mn, String rn) {
- Objects.requireNonNull(mn);
- Objects.requireNonNull(rn);
+ public synchronized ImageLocation findLocation(String module, String name) {
+ Objects.requireNonNull(module);
+ Objects.requireNonNull(name);
+ // Details of the algorithm used here can be found in
+ // jdk.tools.jlink.internal.PerfectHashBuilder.
+ int count = header.getTableLength();
+ int index = redirect.get(ImageStringsReader.hashCode(module, name) % count);
+
+ if (index < 0) {
+ // index is twos complement of location attributes index.
+ index = -index - 1;
+ } else if (index > 0) {
+ // index is hash seed needed to compute location attributes index.
+ index = ImageStringsReader.hashCode(module, name, index) % count;
+ } else {
+ // No entry.
+ return null;
+ }
+
+ long[] attributes = getAttributes(offsets.get(index));
- return findLocation("/" + mn + "/" + rn);
+ if (!ImageLocation.verify(module, name, attributes, stringsReader)) {
+ return null;
+ }
+ return new ImageLocation(attributes, stringsReader);
}
public synchronized ImageLocation findLocation(String name) {
Objects.requireNonNull(name);
// Details of the algorithm used here can be found in
< prev index next >