--- old/src/share/vm/gc/shared/collectedHeap.inline.hpp 2017-05-22 08:52:09.115057649 -0700 +++ new/src/share/vm/gc/shared/collectedHeap.inline.hpp 2017-05-22 08:52:08.999058093 -0700 @@ -33,6 +33,7 @@ #include "oops/arrayOop.hpp" #include "oops/oop.inline.hpp" #include "prims/jvmtiExport.hpp" +#include "runtime/heapMonitoring.hpp" #include "runtime/sharedRuntime.hpp" #include "runtime/thread.inline.hpp" #include "services/lowMemoryDetector.hpp" @@ -81,6 +82,24 @@ SharedRuntime::dtrace_object_alloc(obj, size); } } + + if (HeapMonitoring::initialized()) { + // support for object alloc event (no-op most of the time) + if (klass != NULL && klass->name() != NULL) { + Thread *base_thread = Thread::current(); + if (base_thread->is_Java_thread()) { + JavaThread *thread = (JavaThread *) base_thread; + size_t *bytes_until_sample = thread->bytes_until_sample(); + size_t size_in_bytes = ((size_t) size) << LogHeapWordSize; + assert(size > 0, "positive size"); + if (*bytes_until_sample < size_in_bytes) { + HeapMonitoring::object_alloc_do_sample(thread, obj, size_in_bytes); + } else { + *bytes_until_sample -= size_in_bytes; + } + } + } + } } void CollectedHeap::post_allocation_setup_obj(Klass* klass,