< prev index next >

test/hotspot/jtreg/gc/shenandoah/oom/TestThreadFailure.java

Print this page
*** 1,7 ***
--- 1,8 ---
  /*
   * Copyright (c) 2018, Red Hat, Inc. All rights reserved.
+  * Copyright Amazon.com Inc. or its affiliates. All Rights Reserved.
   * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   *
   * This code is free software; you can redistribute it and/or modify it
   * under the terms of the GNU General Public License version 2 only, as
   * published by the Free Software Foundation.

*** 51,13 ***
--- 52,21 ---
      }
  
      public static void main(String[] args) throws Exception {
          if (args.length > 0) {
              for (int t = 0; t < COUNT; t++) {
+                 // If we experience OutOfMemoryError during our attempt to instantiate NastyThread, we'll abort
+                 // main and will not print "All good".  We'll also report a non-zero termination code.  In the
+                 // case that the previously instantiated NastyThread accumulated more than SheanndoahNoProgressThreshold
+                 // unproductive GC cycles before failing, the main thread may not try a Full GC before it experiences
+                 // OutOfMemoryError exception.
                  Thread thread = new NastyThread();
                  thread.start();
                  thread.join();
+                 // Having joined thread, we know the memory consumed by thread is now garbage, and will eventually be
+                 // collected.  Some or all of that memory may have been promoted, so we may need to perform a Full GC
+                 // in order to reclaim it quickly.
              }
              System.out.println("All good");
              return;
          }
  

*** 71,7 ***
--- 80,21 ---
  
              analyzer.shouldHaveExitValue(0);
              analyzer.shouldContain("java.lang.OutOfMemoryError");
              analyzer.shouldContain("All good");
          }
+ 
+         {
+             ProcessBuilder pb = ProcessTools.createLimitedTestJavaProcessBuilder(
+                     "-Xmx32m",
+                     "-XX:+UnlockExperimentalVMOptions",
+                     "-XX:+UseShenandoahGC", "-XX:ShenandoahGCMode=generational",
+                     TestThreadFailure.class.getName(),
+                     "test");
+ 
+             OutputAnalyzer analyzer = new OutputAnalyzer(pb.start());
+             analyzer.shouldHaveExitValue(0);
+             analyzer.shouldContain("java.lang.OutOfMemoryError");
+             analyzer.shouldContain("All good");
+         }
      }
  }
< prev index next >