OSDN Git Service

Fix OOM test case to handle more optimizations
authorMark Mendell <mark.p.mendell@intel.com>
Tue, 19 Aug 2014 02:19:06 +0000 (22:19 -0400)
committerMark Mendell <mark.p.mendell@intel.com>
Tue, 19 Aug 2014 02:19:06 +0000 (22:19 -0400)
The 080-oom-throw test case has some code in triggerInstanceOOM to
exhaust memory.  Unfortunately, a sufficiently intelligent compiler can
inline the call to memEater.confuseCompilerOptimization and realize that
it is a no-op.  In that case, the memEater variable is dead, and if a
compiler can improve the GC map, the only live heap data will be the
last allocated chunk.

Fix this by ensuring that the start of the chain (memEater) is really
live. Also ensure that it becomes dead before exiting the method, or the
subsequent println will fail allocating memory.

Change-Id: I345ebc3e19bd86e176c616ff18bcac4ed8dbb419
Signed-off-by: Mark Mendell <mark.p.mendell@intel.com>
test/080-oom-throw/src/Main.java

index 035690f..c93f8bb 100644 (file)
@@ -31,6 +31,7 @@ public class Main {
 
     static class InstanceMemEater {
         static boolean sawOome;
+        static InstanceMemEater hook;
 
         InstanceMemEater next;
         double d1, d2, d3, d4, d5, d6, d7, d8; // Bloat this object so we fill the heap faster.
@@ -45,6 +46,7 @@ public class Main {
         }
 
         static void confuseCompilerOptimization(InstanceMemEater instance) {
+          hook = instance;
         }
     }
 
@@ -61,6 +63,7 @@ public class Main {
             lastMemEater = lastMemEater.next;
         } while (lastMemEater != null);
         memEater.confuseCompilerOptimization(memEater);
+        InstanceMemEater.hook = null;
         return InstanceMemEater.sawOome;
     }