< prev index next >
src/jdk.hotspot.agent/share/classes/sun/jvm/hotspot/tools/HeapSummary.java
Print this page
rev 50281 : 8195097: Make it possible to process StringTable outside safepoint
Reviewed-by:
*** 127,137 ****
} else {
throw new RuntimeException("unknown CollectedHeap type : " + heap.getClass());
}
System.out.println();
- printInternStringStatistics();
}
// Helper methods
private void printGCAlgorithm(Map flagMap) {
--- 127,136 ----
*** 256,298 ****
}
} else {
return -1;
}
}
-
- private void printInternStringStatistics() {
- class StringStat implements StringTable.StringVisitor {
- private int count;
- private long size;
- private OopField stringValueField;
-
- StringStat() {
- VM vm = VM.getVM();
- SystemDictionary sysDict = vm.getSystemDictionary();
- InstanceKlass strKlass = sysDict.getStringKlass();
- // String has a field named 'value' of type 'byte[]'.
- stringValueField = (OopField) strKlass.findField("value", "[B");
- }
-
- private long stringSize(Instance instance) {
- // We include String content in size calculation.
- return instance.getObjectSize() +
- stringValueField.getValue(instance).getObjectSize();
- }
-
- public void visit(Instance str) {
- count++;
- size += stringSize(str);
- }
-
- public void print() {
- System.out.println(count +
- " interned Strings occupying " + size + " bytes.");
- }
- }
-
- StringStat stat = new StringStat();
- StringTable strTable = VM.getVM().getStringTable();
- strTable.stringsDo(stat);
- stat.print();
- }
}
--- 255,260 ----
< prev index next >