Author: pferraro
Date: 2009-03-16 21:42:10 -0400 (Mon, 16 Mar 2009)
New Revision: 2365
Modified:
trunk/mod_cluster/src/demo/java/org/jboss/modcluster/demo/servlet/HeapMemoryLoadServlet.java
Log:
Use MemoryMXBean, not Runtime methods.
Modified:
trunk/mod_cluster/src/demo/java/org/jboss/modcluster/demo/servlet/HeapMemoryLoadServlet.java
===================================================================
---
trunk/mod_cluster/src/demo/java/org/jboss/modcluster/demo/servlet/HeapMemoryLoadServlet.java 2009-03-17
01:41:39 UTC (rev 2364)
+++
trunk/mod_cluster/src/demo/java/org/jboss/modcluster/demo/servlet/HeapMemoryLoadServlet.java 2009-03-17
01:42:10 UTC (rev 2365)
@@ -22,6 +22,10 @@
package org.jboss.modcluster.demo.servlet;
import java.io.IOException;
+import java.lang.management.ManagementFactory;
+import java.lang.management.MemoryUsage;
+import java.util.ArrayList;
+import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -46,22 +50,27 @@
System.gc();
- long free = Runtime.getRuntime().freeMemory() / 2;
+ MemoryUsage usage = ManagementFactory.getMemoryMXBean().getHeapMemoryUsage();
- @SuppressWarnings("unused")
- Object array = null;
+ long max = usage.getMax();
+ long total = (max >= 0) ? max : usage.getCommitted();
+ long free = total - usage.getUsed();
+ // Reserve half the available free memory
+ long reserve = free / 2;
+
+ List<Object> list = new ArrayList<Object>(2);
+
if (free > Integer.MAX_VALUE)
{
- array = new byte[Integer.MAX_VALUE][(int) free / Integer.MAX_VALUE];
+ list.add(new byte[(int) (reserve / Integer.MAX_VALUE)][Integer.MAX_VALUE]);
}
- else
- {
- array = new byte[(int) free];
- }
+ list.add(new byte[(int) (reserve % Integer.MAX_VALUE)]);
+
try
{
+
Thread.sleep(duration);
}
catch (InterruptedException e)
@@ -69,7 +78,7 @@
Thread.currentThread().interrupt();
}
- array = null;
+ list.clear();
System.gc();
Show replies by date