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