src/share/vm/gc_implementation/shared/gcTrace.hpp

Print this page
rev 4462 : 8012086: The object count event should only send events for instances occupying more than 0.5% of the heap

*** 28,37 **** --- 28,38 ---- #include "gc_interface/gcCause.hpp" #include "gc_interface/gcName.hpp" #include "gc_implementation/shared/gcWhen.hpp" #include "gc_implementation/shared/copyFailedInfo.hpp" #include "memory/allocation.hpp" + #include "memory/klassInfoClosure.hpp" #include "memory/referenceType.hpp" #ifndef SERIALGC #include "gc_implementation/g1/g1YCTypes.hpp" #endif
*** 108,117 **** --- 109,145 ---- G1YCType type() const { return _type; } }; #endif // SERIALGC + class ObjectCountEventSenderClosure : public KlassInfoClosure { + GCTracer* _gc_tracer; + const double _size_threshold_percentage; + const size_t _total_size_in_words; + public: + ObjectCountEventSenderClosure(GCTracer* gc_tracer, size_t total_size_in_words) : + _gc_tracer(gc_tracer), + _size_threshold_percentage(ObjectCountCutOffPercent / 100), + _total_size_in_words(total_size_in_words) + {} + virtual void do_cinfo(KlassInfoEntry* entry); + protected: + virtual void send_event(KlassInfoEntry* entry); + private: + bool should_send_event(KlassInfoEntry* entry) const; + }; + + class ObjectCountFilter : public BoolObjectClosure { + BoolObjectClosure* _is_alive; + public: + ObjectCountFilter(BoolObjectClosure* is_alive = NULL) : _is_alive(is_alive) {} + bool do_object_b(oop obj); + void do_object(oop obj) { ShouldNotReachHere(); } + private: + bool is_externally_visible_klass(klassOop k) const; + }; + class GCTracer : public ResourceObj { friend class ObjectCountEventSenderClosure; protected: SharedGCInfo _shared_gc_info;