diff options
Diffstat (limited to 'libjava/classpath/vm/reference/gnu/java')
| -rw-r--r-- | libjava/classpath/vm/reference/gnu/java/lang/management/VMMemoryMXBeanImpl.java | 57 | ||||
| -rw-r--r-- | libjava/classpath/vm/reference/gnu/java/nio/VMChannel.java | 1 |
2 files changed, 52 insertions, 6 deletions
diff --git a/libjava/classpath/vm/reference/gnu/java/lang/management/VMMemoryMXBeanImpl.java b/libjava/classpath/vm/reference/gnu/java/lang/management/VMMemoryMXBeanImpl.java index 43b9ae1a100..eade26374db 100644 --- a/libjava/classpath/vm/reference/gnu/java/lang/management/VMMemoryMXBeanImpl.java +++ b/libjava/classpath/vm/reference/gnu/java/lang/management/VMMemoryMXBeanImpl.java @@ -37,8 +37,14 @@ exception statement from your version. */ package gnu.java.lang.management; +import java.lang.management.ManagementFactory; +import java.lang.management.MemoryPoolMXBean; +import java.lang.management.MemoryType; import java.lang.management.MemoryUsage; +import java.util.Iterator; +import java.util.List; + /** * Provides access to information about the memory * management of the current invocation of the virtual @@ -62,10 +68,7 @@ final class VMMemoryMXBeanImpl */ static MemoryUsage getHeapMemoryUsage() { - Runtime runtime = Runtime.getRuntime(); - long totalMem = runtime.totalMemory(); - return new MemoryUsage(-1, totalMem - runtime.freeMemory(), - totalMem, runtime.maxMemory()); + return getUsage(MemoryType.HEAP); } /** @@ -76,7 +79,10 @@ final class VMMemoryMXBeanImpl * @return an {@link java.lang.management.MemoryUsage} instance * for non-heap memory. */ - static native MemoryUsage getNonHeapMemoryUsage(); + static MemoryUsage getNonHeapMemoryUsage() + { + return getUsage(MemoryType.NON_HEAP); + } /** * Returns the number of objects ready to be garbage collected. @@ -106,4 +112,45 @@ final class VMMemoryMXBeanImpl */ static native void setVerbose(boolean verbose); + /** + * Totals the memory usage from all the pools that match + * the given type. + * + * @param type the type of memory pools to accumulate + * (heap or non-heap). + * @return the memory usage overall. + */ + private static MemoryUsage getUsage(MemoryType type) { + long init = 0, committed = 0, used = 0, max = 0; + Iterator pools = + ManagementFactory.getMemoryPoolMXBeans().iterator(); + while (pools.hasNext()) + { + MemoryPoolMXBean pool = (MemoryPoolMXBean) pools.next(); + if (pool.getType() == type) + { + MemoryUsage usage = pool.getUsage(); + if (init != -1) + { + long poolInit = usage.getInit(); + if (poolInit == -1) + init = -1; + else + init += poolInit; + } + committed += usage.getCommitted(); + used += usage.getUsed(); + if (max != -1) + { + long poolMax = usage.getMax(); + if (poolMax == -1) + max = -1; + else + max += poolMax; + } + } + } + return new MemoryUsage(init, used, committed, max); + } + } diff --git a/libjava/classpath/vm/reference/gnu/java/nio/VMChannel.java b/libjava/classpath/vm/reference/gnu/java/nio/VMChannel.java index 1f69877b6ba..a9d1452b72d 100644 --- a/libjava/classpath/vm/reference/gnu/java/nio/VMChannel.java +++ b/libjava/classpath/vm/reference/gnu/java/nio/VMChannel.java @@ -256,7 +256,6 @@ public final class VMChannel * Assumes the that buffer list constains DirectBuffers. Will perform * as gathering write. * - * @param fd * @param srcs * @param offset * @param length |

