250
251 class AllClassesFinder : public KlassClosure {
252 KlassInfoTable *_table;
253 public:
254 AllClassesFinder(KlassInfoTable* table) : _table(table) {}
255 virtual void do_klass(Klass* k);
256 };
257
258 public:
259 KlassInfoTable(bool add_all_classes);
260 ~KlassInfoTable();
261 bool record_instance(const oop obj);
262 void iterate(KlassInfoClosure* cic);
263 bool allocation_failed() { return _buckets == NULL; }
264 size_t size_of_instances_in_words() const;
265
266 friend class KlassInfoHisto;
267 friend class KlassHierarchy;
268 };
269
270 class KlassHierarchy : public StackObj {
271 public:
272 KlassHierarchy(KlassInfoTable* cit, const char* title);
273 ~KlassHierarchy();
274 static void print_class_hierarchy(outputStream* st, bool print_interfaces, bool print_subclasses,
275 char* classname);
276
277 private:
278 static void set_do_print_for_class_hierarchy(KlassInfoEntry* cie, KlassInfoTable* cit,
279 bool print_subclasse);
280 static void print_class(outputStream* st, KlassInfoEntry* cie, bool print_subclasses);
281 };
282
283 class KlassInfoHisto : public StackObj {
284 private:
285 static const int _histo_initial_size = 1000;
286 KlassInfoTable *_cit;
287 GrowableArray<KlassInfoEntry*>* _elements;
288 GrowableArray<KlassInfoEntry*>* elements() const { return _elements; }
289 const char* _title;
290 const char* title() const { return _title; }
291 static int sort_helper(KlassInfoEntry** e1, KlassInfoEntry** e2);
292 void print_elements(outputStream* st) const;
293 void print_class_stats(outputStream* st, bool csv_format, const char *columns);
|
250
251 class AllClassesFinder : public KlassClosure {
252 KlassInfoTable *_table;
253 public:
254 AllClassesFinder(KlassInfoTable* table) : _table(table) {}
255 virtual void do_klass(Klass* k);
256 };
257
258 public:
259 KlassInfoTable(bool add_all_classes);
260 ~KlassInfoTable();
261 bool record_instance(const oop obj);
262 void iterate(KlassInfoClosure* cic);
263 bool allocation_failed() { return _buckets == NULL; }
264 size_t size_of_instances_in_words() const;
265
266 friend class KlassInfoHisto;
267 friend class KlassHierarchy;
268 };
269
270 class KlassHierarchy : AllStatic {
271 public:
272 static void print_class_hierarchy(outputStream* st, bool print_interfaces, bool print_subclasses,
273 char* classname);
274
275 private:
276 static void set_do_print_for_class_hierarchy(KlassInfoEntry* cie, KlassInfoTable* cit,
277 bool print_subclasse);
278 static void print_class(outputStream* st, KlassInfoEntry* cie, bool print_subclasses);
279 };
280
281 class KlassInfoHisto : public StackObj {
282 private:
283 static const int _histo_initial_size = 1000;
284 KlassInfoTable *_cit;
285 GrowableArray<KlassInfoEntry*>* _elements;
286 GrowableArray<KlassInfoEntry*>* elements() const { return _elements; }
287 const char* _title;
288 const char* title() const { return _title; }
289 static int sort_helper(KlassInfoEntry** e1, KlassInfoEntry** e2);
290 void print_elements(outputStream* st) const;
291 void print_class_stats(outputStream* st, bool csv_format, const char *columns);
|