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

Print this page

        

*** 29,41 **** --- 29,43 ---- #include "gc_implementation/shared/gcTimer.hpp" #include "gc_implementation/shared/gcTrace.hpp" #include "gc_implementation/shared/objectCountEventSender.hpp" #include "memory/heapInspection.hpp" #include "memory/referenceProcessorStats.hpp" + #include "runtime/handles.hpp" #include "runtime/os.hpp" #include "utilities/globalDefinitions.hpp" #include "utilities/ticks.inline.hpp" + #include "trace/tracing.hpp" #if INCLUDE_ALL_GCS #include "gc_implementation/g1/evacuationInfo.hpp" #endif
*** 170,179 **** --- 172,207 ---- void YoungGCTracer::report_tenuring_threshold(const uint tenuring_threshold) { _tenuring_threshold = tenuring_threshold; } + void YoungGCTracer::report_promotion_to_new_plab(oop const old, uint age, bool tenured, size_t plab_size) { + + EventPromotionSample event; + + if (event.should_commit()) { + event.set_gcId(_shared_gc_info.gc_id().id()); + event.set_class(KlassHandle(old->klass())()); + event.set_objectSize((size_t)old->size()); + event.set_tenured(tenured); + event.set_tenuringAge(age); + + // If the PLAB size is the same as the object size the copy was done directly + // to the heap instead of allocating a new PLAB to copy the object to + if ((size_t)old->size() == plab_size) { + event.set_directAllocation(true); + // Set plabSize to 0 as it otherwise will be a random value + event.set_plabSize(0); + } else { + event.set_directAllocation(false); + event.set_plabSize(plab_size); + } + + event.commit(); + } + } + void OldGCTracer::report_gc_end_impl(const Ticks& timestamp, TimePartitions* time_partitions) { assert_set_gc_id(); GCTracer::report_gc_end_impl(timestamp, time_partitions); send_old_gc_event();