< prev index next >
test/runtime/SharedArchiveFile/SpaceUtilizationCheck.java
Print this page
@@ -39,10 +39,11 @@
import sun.hotspot.WhiteBox;
import java.util.regex.Pattern;
import java.util.regex.Matcher;
import java.util.ArrayList;
+import java.util.Hashtable;
import java.lang.Integer;
public class SpaceUtilizationCheck {
// [1] Each region must have strictly less than
// WhiteBox.metaspaceReserveAlignment() bytes of unused space.
@@ -60,24 +61,32 @@
}
static void test(String... extra_options) throws Exception {
OutputAnalyzer output = CDSTestUtils.createArchive(extra_options);
CDSTestUtils.checkDump(output);
- Pattern pattern = Pattern.compile("^.. space: *([0-9]+).* out of *([0-9]+) bytes .* at 0x([0-9a0-f]+)");
+ Pattern pattern = Pattern.compile("^(..) space: *([0-9]+).* out of *([0-9]+) bytes .* at 0x([0-9a0-f]+)");
WhiteBox wb = WhiteBox.getWhiteBox();
long reserve_alignment = wb.metaspaceReserveAlignment();
System.out.println("Metaspace::reserve_alignment() = " + reserve_alignment);
long last_region = -1;
+ Hashtable<String,String> checked = new Hashtable<>();
for (String line : output.getStdout().split("\n")) {
if (line.contains(" space:") && !line.contains("st space:")) {
Matcher matcher = pattern.matcher(line);
if (matcher.find()) {
- System.out.println("Checking: " + line);
- long used = Long.parseLong(matcher.group(1));
- long capacity = Long.parseLong(matcher.group(2));
- long address = Long.parseLong(matcher.group(3), 16);
+ String name = matcher.group(1);
+ if (name.equals("s0") || name.equals("s1")) {
+ // String regions are listed at the end and they may not be fully occupied.
+ break;
+ } else {
+ System.out.println("Checking " + name + " in : " + line);
+ checked.put(name, name);
+ }
+ long used = Long.parseLong(matcher.group(2));
+ long capacity = Long.parseLong(matcher.group(3));
+ long address = Long.parseLong(matcher.group(4), 16);
long unused = capacity - used;
if (unused < 0) {
throw new RuntimeException("Unused space (" + unused + ") less than 0");
}
if (unused > reserve_alignment) {
@@ -91,7 +100,10 @@
}
last_region = address + capacity;
}
}
}
+ if (checked.size() != 5) {
+ throw new RuntimeException("Must have 5 consecutive, fully utilized regions");
+ }
}
}
< prev index next >