# HG changeset patch # User Doug Simon # Date 1401278851 -7200 # Node ID 272b64c1d65b54a2bd9998650b6a71ed57da8371 # Parent e4567f9acc4297dfb4e070a1f0755eaf7ad7aa8e do not count the memory allocated by ThreadMXBean.getThreadAllocatedBytes() diff -r e4567f9acc42 -r 272b64c1d65b graal/com.oracle.graal.debug/src/com/oracle/graal/debug/internal/MemUseTrackerImpl.java --- 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;