< prev index next >

src/share/vm/prims/jvmtiEnv.cpp

Print this page

        

@@ -44,10 +44,11 @@
 #include "prims/jvmtiAgentThread.hpp"
 #include "prims/jvmtiClassFileReconstituter.hpp"
 #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"
 #include "prims/jvmtiRedefineClasses.hpp"
 #include "prims/jvmtiTagMap.hpp"

@@ -1933,10 +1934,34 @@
   TraceTime t("IterateOverInstancesOfClass", TRACETIME_LOG(Debug, jvmti, objecttagging));
   JvmtiTagMap::tag_map_for(this)->iterate_over_heap(object_filter, klass, heap_object_callback, user_data);
   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
   //
 
< prev index next >