diff -r 69634e97740c src/hotspot/share/include/jmm.h
--- a/src/hotspot/share/include/jmm.h	Thu Jul 12 12:06:22 2018 -0700
+++ b/src/hotspot/share/include/jmm.h	Fri Jul 13 18:11:40 2018 +0200
@@ -239,6 +239,10 @@
   jobject      (JNICALL *GetMemoryPoolUsage)     (JNIEnv* env, jobject pool);
   jobject      (JNICALL *GetPeakMemoryPoolUsage) (JNIEnv* env, jobject pool);
 
+  jlong         (JNICALL *GetCurrentThreadAllocatedMemory)
+                                                 (JNIEnv *env,
+                                                  jobject currentThread);
+
   void         (JNICALL *GetThreadAllocatedMemory)
                                                  (JNIEnv *env,
                                                   jlongArray ids,
diff -r 69634e97740c src/hotspot/share/services/management.cpp
--- a/src/hotspot/share/services/management.cpp	Thu Jul 12 12:06:22 2018 -0700
+++ b/src/hotspot/share/services/management.cpp	Fri Jul 13 18:11:40 2018 +0200
@@ -2065,6 +2065,18 @@
 }
 #endif // INCLUDE_MANAGEMENT
 
+JVM_ENTRY(jlong, jmm_GetCurrentThreadAllocatedMemory(JNIEnv *env, jobject currentThread))
+  // We don't use a ThreadsListHandle here because the current thread
+  // must be alive.
+  oop java_thread = JNIHandles::resolve_non_null(currentThread);
+  JavaThread* thr = java_lang_Thread::thread(java_thread);
+  if (thread == thr) {
+    // only supported for the current thread
+    return thr->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
@@ -2189,6 +2201,7 @@
   jmm_GetMemoryManagers,
   jmm_GetMemoryPoolUsage,
   jmm_GetPeakMemoryPoolUsage,
+  jmm_GetCurrentThreadAllocatedMemory,
   jmm_GetThreadAllocatedMemory,
   jmm_GetMemoryUsage,
   jmm_GetLongAttribute,
diff -r 69634e97740c src/java.management/share/classes/sun/management/ThreadImpl.java
--- a/src/java.management/share/classes/sun/management/ThreadImpl.java	Thu Jul 12 12:06:22 2018 -0700
+++ b/src/java.management/share/classes/sun/management/ThreadImpl.java	Fri Jul 13 18:11:40 2018 +0200
@@ -342,6 +342,10 @@
         }
     }
 
+    protected long getCurrentThreadAllocatedBytes() {
+        return getCurrentThreadAllocatedMemory1(Thread.currentThread());
+    }
+
     protected long getThreadAllocatedBytes(long id) {
         long[] ids = new long[1];
         ids[0] = id;
@@ -511,6 +515,7 @@
     private static native void getThreadTotalCpuTime1(long[] ids, long[] result);
     private static native long getThreadUserCpuTime0(long id);
     private static native void getThreadUserCpuTime1(long[] ids, long[] result);
+    private static native long getCurrentThreadAllocatedMemory1(Thread currentThread);
     private static native void getThreadAllocatedMemory1(long[] ids, long[] result);
     private static native void setThreadCpuTimeEnabled0(boolean enable);
     private static native void setThreadAllocatedMemoryEnabled0(boolean enable);
diff -r 69634e97740c src/java.management/share/native/libmanagement/ThreadImpl.c
--- a/src/java.management/share/native/libmanagement/ThreadImpl.c	Thu Jul 12 12:06:22 2018 -0700
+++ b/src/java.management/share/native/libmanagement/ThreadImpl.c	Fri Jul 13 18:11:40 2018 +0200
@@ -94,6 +94,13 @@
                                              JNI_FALSE /* user */);
 }
 
+JNIEXPORT jlong JNICALL
+Java_sun_management_ThreadImpl_getCurrentThreadAllocatedMemory1
+  (JNIEnv *env, jclass cls, jobject currentThread)
+{
+    return jmm_interface->GetCurrentThreadAllocatedMemory(env, currentThread);
+}
+
 JNIEXPORT void JNICALL
 Java_sun_management_ThreadImpl_getThreadAllocatedMemory1
   (JNIEnv *env, jclass cls, jlongArray ids, jlongArray sizeArray)
diff -r 69634e97740c src/jdk.management/share/classes/com/sun/management/ThreadMXBean.java
--- a/src/jdk.management/share/classes/com/sun/management/ThreadMXBean.java	Thu Jul 12 12:06:22 2018 -0700
+++ b/src/jdk.management/share/classes/com/sun/management/ThreadMXBean.java	Fri Jul 13 18:11:40 2018 +0200
@@ -107,6 +107,8 @@
      */
     public long[] getThreadUserTime(long[] ids);
 
+    public long getCurrentThreadAllocatedBytes();
+
     /**
      * Returns an approximation of the total amount of memory, in bytes,
      * allocated in heap memory for the thread of the specified ID.
diff -r 69634e97740c src/jdk.management/share/classes/com/sun/management/internal/HotSpotThreadImpl.java
--- a/src/jdk.management/share/classes/com/sun/management/internal/HotSpotThreadImpl.java	Thu Jul 12 12:06:22 2018 -0700
+++ b/src/jdk.management/share/classes/com/sun/management/internal/HotSpotThreadImpl.java	Fri Jul 13 18:11:40 2018 +0200
@@ -58,6 +58,11 @@
     }
 
     @Override
+    public long getCurrentThreadAllocatedBytes() {
+        return super.getCurrentThreadAllocatedBytes();
+    }
+
+    @Override
     public long getThreadAllocatedBytes(long id) {
         return super.getThreadAllocatedBytes(id);
     }
