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;