--- old/src/share/vm/gc_implementation/shared/gcTrace.hpp 2013-05-07 14:49:31.980167946 +0200 +++ new/src/share/vm/gc_implementation/shared/gcTrace.hpp 2013-05-07 14:49:31.908167949 +0200 @@ -30,6 +30,7 @@ #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" @@ -110,6 +111,33 @@ #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: