Mercurial > hg > shenandoah-preopenjdk-archive > openjdk8 > jdk
changeset 10199:059b95b66b7a
8058733: [TESTBUG] java/lang/invoke/LFCaching/LFSingleThreadCachingTest.java and LFMultiThreadCachingTest.java failed on some platforms due to java.lang.VirtualMachineError
Reviewed-by: vlivanov, psandoz, darcy
author | kshefov |
---|---|
date | Thu, 16 Oct 2014 14:14:32 +0400 |
parents | ecab861b3802 |
children | 08a89ab01595 |
files | test/java/lang/invoke/LFCaching/LambdaFormTestCase.java |
diffstat | 1 files changed, 22 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/test/java/lang/invoke/LFCaching/LambdaFormTestCase.java Thu Oct 16 13:51:29 2014 +0400 +++ b/test/java/lang/invoke/LFCaching/LambdaFormTestCase.java Thu Oct 16 14:14:32 2014 +0400 @@ -22,6 +22,8 @@ */ import com.oracle.testlibrary.jsr292.Helper; +import com.sun.management.HotSpotDiagnosticMXBean; +import java.lang.management.ManagementFactory; import java.lang.reflect.Method; import java.util.Collection; import java.util.function.Function; @@ -37,6 +39,8 @@ private final static String METHOD_HANDLE_CLASS_NAME = "java.lang.invoke.MethodHandle"; private final static String INTERNAL_FORM_METHOD_NAME = "internalForm"; + private static final double ITERATIONS_TO_CODE_CACHE_SIZE_RATIO + = 45 / (128.0 * 1024 * 1024); /** * Reflection link to {@code j.l.i.MethodHandle.internalForm} method. It is @@ -87,7 +91,24 @@ boolean passed = true; int testCounter = 0; int failCounter = 0; - long iterations = Math.max(1, Helper.TEST_LIMIT / testMethods.size()); + long testCaseNum = testMethods.size(); + long iterations = Math.max(1, Helper.TEST_LIMIT / testCaseNum); + System.out.printf("Number of iterations according to -DtestLimit is %d (%d cases)%n", + iterations, iterations * testCaseNum); + HotSpotDiagnosticMXBean hsDiagBean = ManagementFactory.getPlatformMXBean(HotSpotDiagnosticMXBean.class); + long codeCacheSize = Long.parseLong( + hsDiagBean.getVMOption("ReservedCodeCacheSize").getValue()); + System.out.printf("Code Cache Size is %d bytes%n", codeCacheSize); + long iterationsByCodeCacheSize = (long) (codeCacheSize + * ITERATIONS_TO_CODE_CACHE_SIZE_RATIO); + System.out.printf("Number of iterations limited by code cache size is %d (%d cases)%n", + iterationsByCodeCacheSize, iterationsByCodeCacheSize * testCaseNum); + if (iterations > iterationsByCodeCacheSize) { + iterations = iterationsByCodeCacheSize; + } + System.out.printf("Number of iterations is set to %d (%d cases)%n", + iterations, iterations * testCaseNum); + System.out.flush(); for (long i = 0; i < iterations; i++) { System.err.println(String.format("Iteration %d:", i)); for (TestMethods testMethod : testMethods) {