test/java/lang/invoke/LFCaching/LambdaFormTestCase.java

Print this page

        

*** 20,29 **** --- 20,31 ---- * or visit www.oracle.com if you need additional information or have any * questions. */ 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; /**
*** 35,44 **** --- 37,48 ---- */ public abstract class LambdaFormTestCase { 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 * used to get a lambda form from a method handle. */
*** 85,95 **** */ public static void runTests(Function<TestMethods, LambdaFormTestCase> ctor, Collection<TestMethods> testMethods) { boolean passed = true; int testCounter = 0; int failCounter = 0; ! long iterations = Math.max(1, Helper.TEST_LIMIT / testMethods.size()); for (long i = 0; i < iterations; i++) { System.err.println(String.format("Iteration %d:", i)); for (TestMethods testMethod : testMethods) { LambdaFormTestCase testCase = ctor.apply(testMethod); try { --- 89,116 ---- */ public static void runTests(Function<TestMethods, LambdaFormTestCase> ctor, Collection<TestMethods> testMethods) { boolean passed = true; int testCounter = 0; int failCounter = 0; ! 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) { LambdaFormTestCase testCase = ctor.apply(testMethod); try {