--- old/src/share/vm/prims/jvmtiEnv.cpp 2017-04-04 15:20:35.256071714 -0700 +++ new/src/share/vm/prims/jvmtiEnv.cpp 2017-04-04 15:20:35.128072245 -0700 @@ -46,6 +46,7 @@ #include "prims/jvmtiCodeBlobEvents.hpp" #include "prims/jvmtiExtensions.hpp" #include "prims/jvmtiGetLoadedClasses.hpp" +#include "prims/jvmtiHeapTransition.hpp" #include "prims/jvmtiImpl.hpp" #include "prims/jvmtiManageCapabilities.hpp" #include "prims/jvmtiRawMonitor.hpp" @@ -1935,6 +1936,30 @@ return JVMTI_ERROR_NONE; } /* end IterateOverInstancesOfClass */ +// Start the sampler. +jvmtiError +JvmtiEnv::StartHeapSampling(jint monitoring_period) { + if (monitoring_period < 0) { + return JVMTI_ERROR_ILLEGAL_ARGUMENT; + } + + HeapMonitor = true; + HeapThreadTransition htt(Thread::current()); + HeapMonitoring::initialize_profiling(monitoring_period); + return JVMTI_ERROR_NONE; +} /* end StartHeapSampling */ + +// Get the currently live sampled allocations. +jvmtiError +JvmtiEnv::GetLiveTraces(jvmtiStackTraceData **stack_traces, jint *num_traces) { + HeapThreadTransition htt(Thread::current()); + if (stack_traces == NULL || num_traces == NULL) { + return JVMTI_ERROR_ILLEGAL_ARGUMENT; + } + + HeapMonitoring::get_live_traces(stack_traces, num_traces); + return JVMTI_ERROR_NONE; +} /* end GetLiveTraces */ // // Local Variable functions