changeset 15965:272b64c1d65b

do not count the memory allocated by ThreadMXBean.getThreadAllocatedBytes()
author Doug Simon <doug.simon@oracle.com>
date Wed, 28 May 2014 14:07:31 +0200
parents e4567f9acc42
children 27ff0792b048
files graal/com.oracle.graal.debug/src/com/oracle/graal/debug/internal/MemUseTrackerImpl.java
diffstat 1 files changed, 13 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/graal/com.oracle.graal.debug/src/com/oracle/graal/debug/internal/MemUseTrackerImpl.java	Wed May 28 12:17:16 2014 +0200
+++ b/graal/com.oracle.graal.debug/src/com/oracle/graal/debug/internal/MemUseTrackerImpl.java	Wed May 28 14:07:31 2014 +0200
@@ -22,6 +22,8 @@
  */
 package com.oracle.graal.debug.internal;
 
+import static java.lang.Thread.*;
+
 import java.lang.management.*;
 
 import com.oracle.graal.debug.*;
@@ -31,6 +33,15 @@
 
     private static final ThreadMXBean threadMXBean = (ThreadMXBean) ManagementFactory.getThreadMXBean();
 
+    /**
+     * The amount of memory allocated by {@link ThreadMXBean#getThreadAllocatedBytes(long)} itself.
+     */
+    private static final long threadMXBeanOverhead = -getCurrentThreadAllocatedBytes() + getCurrentThreadAllocatedBytes();
+
+    private static long getCurrentThreadAllocatedBytes() {
+        return threadMXBean.getThreadAllocatedBytes(currentThread().getId()) - threadMXBeanOverhead;
+    }
+
     public static final Closeable VOID_CLOSEABLE = new Closeable() {
 
         @Override
@@ -84,12 +95,12 @@
 
         private CloseableImpl() {
             this.parent = currentTracker.get();
-            this.start = threadMXBean.getThreadAllocatedBytes(Thread.currentThread().getId());
+            this.start = getCurrentThreadAllocatedBytes();
         }
 
         @Override
         public void close() {
-            long end = threadMXBean.getThreadAllocatedBytes(Thread.currentThread().getId());
+            long end = getCurrentThreadAllocatedBytes();
             long allocated = end - start;
             if (parent != null) {
                 parent.nestedAmountToSubtract += allocated;