Mercurial > hg > graal-compiler
diff src/share/vm/memory/heapInspection.hpp @ 10405:f2110083203d
8005849: JEP 167: Event-Based JVM Tracing
Reviewed-by: acorn, coleenp, sla
Contributed-by: Karen Kinnear <karen.kinnear@oracle.com>, Bengt Rutisson <bengt.rutisson@oracle.com>, Calvin Cheung <calvin.cheung@oracle.com>, Erik Gahlin <erik.gahlin@oracle.com>, Erik Helin <erik.helin@oracle.com>, Jesper Wilhelmsson <jesper.wilhelmsson@oracle.com>, Keith McGuigan <keith.mcguigan@oracle.com>, Mattias Tobiasson <mattias.tobiasson@oracle.com>, Markus Gronlund <markus.gronlund@oracle.com>, Mikael Auno <mikael.auno@oracle.com>, Nils Eliasson <nils.eliasson@oracle.com>, Nils Loodin <nils.loodin@oracle.com>, Rickard Backman <rickard.backman@oracle.com>, Staffan Larsen <staffan.larsen@oracle.com>, Stefan Karlsson <stefan.karlsson@oracle.com>, Yekaterina Kantserova <yekaterina.kantserova@oracle.com>
author | sla |
---|---|
date | Mon, 10 Jun 2013 11:30:51 +0200 |
parents | 92ef81e2f571 |
children | 2cbc8f3011a0 |
line wrap: on
line diff
--- a/src/share/vm/memory/heapInspection.hpp Fri Jun 07 09:33:01 2013 -0700 +++ b/src/share/vm/memory/heapInspection.hpp Mon Jun 10 11:30:51 2013 +0200 @@ -26,6 +26,7 @@ #define SHARE_VM_MEMORY_HEAPINSPECTION_HPP #include "memory/allocation.inline.hpp" +#include "memory/klassInfoClosure.hpp" #include "oops/oop.inline.hpp" #include "oops/annotations.hpp" #include "utilities/macros.hpp" @@ -203,12 +204,6 @@ const char* name() const; }; -class KlassInfoClosure: public StackObj { - public: - // Called for each KlassInfoEntry. - virtual void do_cinfo(KlassInfoEntry* cie) = 0; -}; - class KlassInfoBucket: public CHeapObj<mtInternal> { private: KlassInfoEntry* _list; @@ -224,6 +219,8 @@ class KlassInfoTable: public StackObj { private: int _size; + static const int _num_buckets = 20011; + size_t _size_of_instances_in_words; // An aligned reference address (typically the least // address in the perm gen) used for hashing klass @@ -242,21 +239,19 @@ }; public: - // Table size - enum { - cit_size = 20011 - }; - KlassInfoTable(int size, HeapWord* ref, bool need_class_stats); + KlassInfoTable(bool need_class_stats); ~KlassInfoTable(); bool record_instance(const oop obj); void iterate(KlassInfoClosure* cic); bool allocation_failed() { return _buckets == NULL; } + size_t size_of_instances_in_words() const; friend class KlassInfoHisto; }; class KlassInfoHisto : public StackObj { private: + static const int _histo_initial_size = 1000; KlassInfoTable *_cit; GrowableArray<KlassInfoEntry*>* _elements; GrowableArray<KlassInfoEntry*>* elements() const { return _elements; } @@ -334,11 +329,7 @@ } public: - enum { - histo_initial_size = 1000 - }; - KlassInfoHisto(KlassInfoTable* cit, const char* title, - int estimatedCount); + KlassInfoHisto(KlassInfoTable* cit, const char* title); ~KlassInfoHisto(); void add(KlassInfoEntry* cie); void print_histo_on(outputStream* st, bool print_class_stats, bool csv_format, const char *columns); @@ -347,6 +338,11 @@ #endif // INCLUDE_SERVICES +// These declarations are needed since teh declaration of KlassInfoTable and +// KlassInfoClosure are guarded by #if INLCUDE_SERVICES +class KlassInfoTable; +class KlassInfoClosure; + class HeapInspection : public StackObj { bool _csv_format; // "comma separated values" format for spreadsheet. bool _print_help; @@ -357,8 +353,11 @@ bool print_class_stats, const char *columns) : _csv_format(csv_format), _print_help(print_help), _print_class_stats(print_class_stats), _columns(columns) {} - void heap_inspection(outputStream* st, bool need_prologue) NOT_SERVICES_RETURN; + void heap_inspection(outputStream* st) NOT_SERVICES_RETURN; + size_t populate_table(KlassInfoTable* cit, BoolObjectClosure* filter = NULL) NOT_SERVICES_RETURN; static void find_instances_at_safepoint(Klass* k, GrowableArray<oop>* result) NOT_SERVICES_RETURN; + private: + void iterate_over_heap(KlassInfoTable* cit, BoolObjectClosure* filter = NULL); }; #endif // SHARE_VM_MEMORY_HEAPINSPECTION_HPP