1546
1547 class VtableStats : AllStatic {
1548 public:
1549 static int no_klasses; // # classes with vtables
1550 static int no_array_klasses; // # array classes
1551 static int no_instance_klasses; // # instanceKlasses
1552 static int sum_of_vtable_len; // total # of vtable entries
1553 static int sum_of_array_vtable_len; // total # of vtable entries in array klasses only
1554 static int fixed; // total fixed overhead in bytes
1555 static int filler; // overhead caused by filler bytes
1556 static int entries; // total bytes consumed by vtable entries
1557 static int array_entries; // total bytes consumed by array vtable entries
1558
1559 static void do_class(Klass* k) {
1560 Klass* kl = k;
1561 klassVtable* vt = kl->vtable();
1562 if (vt == NULL) return;
1563 no_klasses++;
1564 if (kl->is_instance_klass()) {
1565 no_instance_klasses++;
1566 kl->array_klasses_do(do_class);
1567 }
1568 if (kl->is_array_klass()) {
1569 no_array_klasses++;
1570 sum_of_array_vtable_len += vt->length();
1571 }
1572 sum_of_vtable_len += vt->length();
1573 }
1574
1575 static void compute() {
1576 SystemDictionary::classes_do(do_class);
1577 fixed = no_klasses * oopSize; // vtable length
1578 // filler size is a conservative approximation
1579 filler = oopSize * (no_klasses - no_instance_klasses) * (sizeof(InstanceKlass) - sizeof(ArrayKlass) - 1);
1580 entries = sizeof(vtableEntry) * sum_of_vtable_len;
1581 array_entries = sizeof(vtableEntry) * sum_of_array_vtable_len;
1582 }
1583 };
1584
1585 int VtableStats::no_klasses = 0;
1586 int VtableStats::no_array_klasses = 0;
1587 int VtableStats::no_instance_klasses = 0;
1588 int VtableStats::sum_of_vtable_len = 0;
1589 int VtableStats::sum_of_array_vtable_len = 0;
1590 int VtableStats::fixed = 0;
1591 int VtableStats::filler = 0;
1592 int VtableStats::entries = 0;
1593 int VtableStats::array_entries = 0;
1594
1595 void klassVtable::print_statistics() {
1596 ResourceMark rm;
|
1546
1547 class VtableStats : AllStatic {
1548 public:
1549 static int no_klasses; // # classes with vtables
1550 static int no_array_klasses; // # array classes
1551 static int no_instance_klasses; // # instanceKlasses
1552 static int sum_of_vtable_len; // total # of vtable entries
1553 static int sum_of_array_vtable_len; // total # of vtable entries in array klasses only
1554 static int fixed; // total fixed overhead in bytes
1555 static int filler; // overhead caused by filler bytes
1556 static int entries; // total bytes consumed by vtable entries
1557 static int array_entries; // total bytes consumed by array vtable entries
1558
1559 static void do_class(Klass* k) {
1560 Klass* kl = k;
1561 klassVtable* vt = kl->vtable();
1562 if (vt == NULL) return;
1563 no_klasses++;
1564 if (kl->is_instance_klass()) {
1565 no_instance_klasses++;
1566 }
1567 if (kl->is_array_klass()) {
1568 no_array_klasses++;
1569 sum_of_array_vtable_len += vt->length();
1570 }
1571 sum_of_vtable_len += vt->length();
1572 }
1573
1574 static void compute() {
1575 ClassLoaderDataGraph::classes_do(do_class);
1576 fixed = no_klasses * oopSize; // vtable length
1577 // filler size is a conservative approximation
1578 filler = oopSize * (no_klasses - no_instance_klasses) * (sizeof(InstanceKlass) - sizeof(ArrayKlass) - 1);
1579 entries = sizeof(vtableEntry) * sum_of_vtable_len;
1580 array_entries = sizeof(vtableEntry) * sum_of_array_vtable_len;
1581 }
1582 };
1583
1584 int VtableStats::no_klasses = 0;
1585 int VtableStats::no_array_klasses = 0;
1586 int VtableStats::no_instance_klasses = 0;
1587 int VtableStats::sum_of_vtable_len = 0;
1588 int VtableStats::sum_of_array_vtable_len = 0;
1589 int VtableStats::fixed = 0;
1590 int VtableStats::filler = 0;
1591 int VtableStats::entries = 0;
1592 int VtableStats::array_entries = 0;
1593
1594 void klassVtable::print_statistics() {
1595 ResourceMark rm;
|