[jboss-cvs] JBossAS SVN: r61321 - trunk/testsuite/src/main/org/jboss/test/classloader/leak/clstore.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Mar 14 00:23:21 EDT 2007


Author: bstansberry at jboss.com
Date: 2007-03-14 00:23:21 -0400 (Wed, 14 Mar 2007)
New Revision: 61321

Modified:
   trunk/testsuite/src/main/org/jboss/test/classloader/leak/clstore/ClassLoaderStore.java
Log:
Improve memory filling algorithm

Modified: trunk/testsuite/src/main/org/jboss/test/classloader/leak/clstore/ClassLoaderStore.java
===================================================================
--- trunk/testsuite/src/main/org/jboss/test/classloader/leak/clstore/ClassLoaderStore.java	2007-03-14 03:44:55 UTC (rev 61320)
+++ trunk/testsuite/src/main/org/jboss/test/classloader/leak/clstore/ClassLoaderStore.java	2007-03-14 04:23:21 UTC (rev 61321)
@@ -123,9 +123,19 @@
          }
          
          leakAnalyzer.heapSnapshot("snapshot", "mem");
+         
+         if (weakReferenceOnLoader.get() == null)
+         {
+            return null;
+         }
             
          HashMap datapoints = leakAnalyzer.createIndexMatrix();
          
+         if (weakReferenceOnLoader.get() == null)
+         {
+            return null;
+         }
+         
          String report = leakAnalyzer.exploreObjectReferences(datapoints, weakReferenceOnLoader.get(), 18, true, false);
          log.info(report);
          if (reportHTMLFile != null)
@@ -136,8 +146,7 @@
             realoutput.println(report);
             realoutput.close();
          }
-         
-         
+
          leakAnalyzer.forceGC();
       }
       else
@@ -148,6 +157,9 @@
          
          if (weakReferenceOnLoader.get() != null)
             fillMemory(weakReferenceOnLoader);
+         
+         if (weakReferenceOnLoader.get() != null)
+            fillMemory(weakReferenceOnLoader);
       }
       
       return (ClassLoader) weakReferenceOnLoader.get();
@@ -155,25 +167,39 @@
    
    private void fillMemory(WeakReference ref)
    {
-      int bytz = 2 * 1024;
-      while(true) {
+      Runtime rt = Runtime.getRuntime();
+      
+      for (int i = 0; i < 15; i++) 
+      {
+          int toAdd = Math.min(i, 4);
           System.gc();
           
           if (ref.get() == null)
              break;
           
-          // create garbage:
+          // create garbage, filling a larger and larger % of
+          // free memory on each loop
+          long avail = rt.freeMemory();
+          int create = (int) (avail / 100 * (95 + toAdd));
+          int bucket = create / 1000;
+          log.info("Filling " + (95 + toAdd) + "% of free memory. Free memory=" + avail + 
+                   " Total Memory=" + rt.totalMemory() + " Max Memory=" + rt.maxMemory());
+          
           try
           {
-             byte[] b =  new byte[bytz];
-             bytz = bytz * 2;
+             byte[][] bytez =  new byte[1000][];
+             for (int j = 0; j < bytez.length; j++)
+                bytez[j] = new byte[bucket];
           }
           catch (Throwable t)
           {
              System.gc();
              break;
           }
-      }      
+      }
+      
+      if (ref.get() != null)
+         System.gc();
    }
    
    public void removeClassLoader(String key)




More information about the jboss-cvs-commits mailing list