< prev index next >

src/hotspot/share/memory/heapInspection.hpp

Print this page
rev 58082 : 8214535: Parallel heap inspection for jmap histo (G1)
Summary: Add parallel heap inspection to speedup jmap -histo, this patch support G1
Reviewed-by:
Contributed-by: lzang

*** 28,38 **** #include "memory/allocation.hpp" #include "oops/objArrayOop.hpp" #include "oops/oop.hpp" #include "oops/annotations.hpp" #include "utilities/macros.hpp" ! #if INCLUDE_SERVICES // HeapInspection --- 28,38 ---- #include "memory/allocation.hpp" #include "oops/objArrayOop.hpp" #include "oops/oop.hpp" #include "oops/annotations.hpp" #include "utilities/macros.hpp" ! #include "gc/shared/workgroup.hpp" #if INCLUDE_SERVICES // HeapInspection
*** 120,129 **** --- 120,131 ---- ~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; + bool merge(KlassInfoTable* table); + bool merge_entry(const KlassInfoEntry* cie); friend class KlassInfoHisto; friend class KlassHierarchy; };
*** 209,221 **** class KlassInfoTable; class KlassInfoClosure; class HeapInspection : public StackObj { public: ! void heap_inspection(outputStream* st) NOT_SERVICES_RETURN; ! size_t populate_table(KlassInfoTable* cit, BoolObjectClosure* filter = NULL) NOT_SERVICES_RETURN_(0); 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_MEMORY_HEAPINSPECTION_HPP --- 211,259 ---- class KlassInfoTable; class KlassInfoClosure; class HeapInspection : public StackObj { public: ! void heap_inspection(outputStream* st, size_t parallel_thread_num = 1) NOT_SERVICES_RETURN; ! size_t populate_table(KlassInfoTable* cit, BoolObjectClosure* filter = NULL, size_t parallel_thread_num = 1) NOT_SERVICES_RETURN_(0); static void find_instances_at_safepoint(Klass* k, GrowableArray<oop>* result) NOT_SERVICES_RETURN; private: void iterate_over_heap(KlassInfoTable* cit, BoolObjectClosure* filter = NULL); }; + class ParHeapInspectTask : public AbstractGangTask { + private: + CollectedHeap* _heap; + KlassInfoTable* _shared_cit; + BoolObjectClosure* _filter; + size_t* _shared_missed_count; + bool _success; + Mutex _mutex; + size_t _par_thread_num; + + public: + ParHeapInspectTask(CollectedHeap* heap, KlassInfoTable* shared_cit, + BoolObjectClosure* filter, size_t* shared_missed_count, + size_t parallel_thread_num) : + AbstractGangTask("Iterating heap"), + _heap(heap), + _shared_cit(shared_cit), + _filter(filter), + _shared_missed_count(shared_missed_count), + _success(true), + _mutex(Mutex::leaf, "Parallel heap iteration data merge lock"), + _par_thread_num(parallel_thread_num) { } + + bool is_success() { + return _success; + } + + CollectedHeap* getHeap() { + return _heap; + } + virtual void work(uint worker_id); + virtual void do_object_iterate_parallel(ObjectClosure* closure, uint worker_id) = 0; + }; + + + #endif // SHARE_MEMORY_HEAPINSPECTION_HPP
< prev index next >