< prev index next >
src/hotspot/share/services/management.cpp
Print this page
@@ -2066,10 +2066,35 @@
return (jlong)(((double)ticks / (double)os::elapsed_frequency())
* (double)1000.0);
}
#endif // INCLUDE_MANAGEMENT
+// Gets the amount of memory allocated on the Java heap for a single thread.
+// Returns -1 if the thread does not exist or has terminated.
+JVM_ENTRY(jlong, jmm_GetOneThreadAllocatedMemory(JNIEnv *env, jlong thread_id))
+ if (thread_id < 0) {
+ THROW_MSG_(vmSymbols::java_lang_IllegalArgumentException(),
+ "Invalid thread ID", -1);
+ }
+
+ if (thread_id == 0) {
+ // current thread
+ if (THREAD->is_Java_thread()) {
+ return ((JavaThread*)THREAD)->cooked_allocated_bytes();
+ }
+ return -1;
+ }
+
+ ThreadsListHandle tlh;
+ JavaThread* java_thread = tlh.list()->find_JavaThread_from_java_tid(thread_id);
+
+ if (java_thread != NULL) {
+ return java_thread->cooked_allocated_bytes();
+ }
+ return -1;
+JVM_END
+
// Gets an array containing the amount of memory allocated on the Java
// heap for a set of threads (in bytes). Each element of the array is
// the amount of memory allocated for the thread ID specified in the
// corresponding entry in the given array of thread IDs; or -1 if the
// thread does not exist or has terminated.
@@ -2190,10 +2215,11 @@
jmm_GetThreadInfo,
jmm_GetMemoryPools,
jmm_GetMemoryManagers,
jmm_GetMemoryPoolUsage,
jmm_GetPeakMemoryPoolUsage,
+ jmm_GetOneThreadAllocatedMemory,
jmm_GetThreadAllocatedMemory,
jmm_GetMemoryUsage,
jmm_GetLongAttribute,
jmm_GetBoolAttribute,
jmm_SetBoolAttribute,
< prev index next >