< prev index next >

src/hotspot/share/memory/heapInspection.cpp

Print this page


 448   while (indent != 0) {
 449     st->print("|");
 450     indent--;
 451     if (indent != 0) {
 452       st->print("  ");
 453     }
 454   }
 455 }
 456 
 457 // Print the class name and its unique ClassLoader identifer.
 458 static void print_classname(outputStream* st, Klass* klass) {
 459   oop loader_oop = klass->class_loader_data()->class_loader();
 460   st->print("%s/", klass->external_name());
 461   if (loader_oop == NULL) {
 462     st->print("null");
 463   } else {
 464     st->print(INTPTR_FORMAT, p2i(klass->class_loader_data()));
 465   }
 466 }
 467 
 468 static void print_interface(outputStream* st, Klass* intf_klass, const char* intf_type, int indent) {
 469   print_indent(st, indent);
 470   st->print("  implements ");
 471   print_classname(st, intf_klass);
 472   st->print(" (%s intf)\n", intf_type);
 473 }
 474 
 475 void KlassHierarchy::print_class(outputStream* st, KlassInfoEntry* cie, bool print_interfaces) {
 476   ResourceMark rm;
 477   InstanceKlass* klass = (InstanceKlass*)cie->klass();
 478   int indent = 0;
 479 
 480   // Print indentation with proper indicators of superclass.
 481   Klass* super = klass->super();
 482   while (super != NULL) {
 483     super = super->super();
 484     indent++;
 485   }
 486   print_indent(st, indent);
 487   if (indent != 0) st->print("--");
 488 
 489   // Print the class name, its unique ClassLoader identifer, and if it is an interface.
 490   print_classname(st, klass);
 491   if (klass->is_interface()) {
 492     st->print(" (intf)");
 493   }
 494   // Special treatment for generated core reflection accessor classes: print invocation target.
 495   if (ReflectionAccessorImplKlassHelper::is_generated_accessor(klass)) {
 496     st->print(" (invokes: ");
 497     ReflectionAccessorImplKlassHelper::print_invocation_target(st, klass);
 498     st->print(")");
 499   }
 500   st->print("\n");
 501 
 502   // Print any interfaces the class has.
 503   if (print_interfaces) {
 504     Array<Klass*>* local_intfs = klass->local_interfaces();
 505     Array<Klass*>* trans_intfs = klass->transitive_interfaces();
 506     for (int i = 0; i < local_intfs->length(); i++) {
 507       print_interface(st, local_intfs->at(i), "declared", indent);
 508     }
 509     for (int i = 0; i < trans_intfs->length(); i++) {
 510       Klass* trans_interface = trans_intfs->at(i);
 511       // Only print transitive interfaces if they are not also declared.
 512       if (!local_intfs->contains(trans_interface)) {
 513         print_interface(st, trans_interface, "inherited", indent);
 514       }
 515     }
 516   }
 517 }
 518 
 519 void KlassInfoHisto::print_class_stats(outputStream* st,
 520                                       bool csv_format, const char *columns) {
 521   ResourceMark rm;
 522   KlassSizeStats sz, sz_sum;
 523   int i;
 524   julong *col_table = (julong*)(&sz);
 525   julong *colsum_table = (julong*)(&sz_sum);
 526   int width_table[KlassSizeStats::_num_columns];
 527   bool selected[KlassSizeStats::_num_columns];
 528 
 529   _selected_columns = columns;
 530 




 448   while (indent != 0) {
 449     st->print("|");
 450     indent--;
 451     if (indent != 0) {
 452       st->print("  ");
 453     }
 454   }
 455 }
 456 
 457 // Print the class name and its unique ClassLoader identifer.
 458 static void print_classname(outputStream* st, Klass* klass) {
 459   oop loader_oop = klass->class_loader_data()->class_loader();
 460   st->print("%s/", klass->external_name());
 461   if (loader_oop == NULL) {
 462     st->print("null");
 463   } else {
 464     st->print(INTPTR_FORMAT, p2i(klass->class_loader_data()));
 465   }
 466 }
 467 
 468 static void print_interface(outputStream* st, InstanceKlass* intf_klass, const char* intf_type, int indent) {
 469   print_indent(st, indent);
 470   st->print("  implements ");
 471   print_classname(st, intf_klass);
 472   st->print(" (%s intf)\n", intf_type);
 473 }
 474 
 475 void KlassHierarchy::print_class(outputStream* st, KlassInfoEntry* cie, bool print_interfaces) {
 476   ResourceMark rm;
 477   InstanceKlass* klass = (InstanceKlass*)cie->klass();
 478   int indent = 0;
 479 
 480   // Print indentation with proper indicators of superclass.
 481   Klass* super = klass->super();
 482   while (super != NULL) {
 483     super = super->super();
 484     indent++;
 485   }
 486   print_indent(st, indent);
 487   if (indent != 0) st->print("--");
 488 
 489   // Print the class name, its unique ClassLoader identifer, and if it is an interface.
 490   print_classname(st, klass);
 491   if (klass->is_interface()) {
 492     st->print(" (intf)");
 493   }
 494   // Special treatment for generated core reflection accessor classes: print invocation target.
 495   if (ReflectionAccessorImplKlassHelper::is_generated_accessor(klass)) {
 496     st->print(" (invokes: ");
 497     ReflectionAccessorImplKlassHelper::print_invocation_target(st, klass);
 498     st->print(")");
 499   }
 500   st->print("\n");
 501 
 502   // Print any interfaces the class has.
 503   if (print_interfaces) {
 504     Array<InstanceKlass*>* local_intfs = klass->local_interfaces();
 505     Array<InstanceKlass*>* trans_intfs = klass->transitive_interfaces();
 506     for (int i = 0; i < local_intfs->length(); i++) {
 507       print_interface(st, local_intfs->at(i), "declared", indent);
 508     }
 509     for (int i = 0; i < trans_intfs->length(); i++) {
 510       InstanceKlass* trans_interface = trans_intfs->at(i);
 511       // Only print transitive interfaces if they are not also declared.
 512       if (!local_intfs->contains(trans_interface)) {
 513         print_interface(st, trans_interface, "inherited", indent);
 514       }
 515     }
 516   }
 517 }
 518 
 519 void KlassInfoHisto::print_class_stats(outputStream* st,
 520                                       bool csv_format, const char *columns) {
 521   ResourceMark rm;
 522   KlassSizeStats sz, sz_sum;
 523   int i;
 524   julong *col_table = (julong*)(&sz);
 525   julong *colsum_table = (julong*)(&sz_sum);
 526   int width_table[KlassSizeStats::_num_columns];
 527   bool selected[KlassSizeStats::_num_columns];
 528 
 529   _selected_columns = columns;
 530 


< prev index next >