package com.test.pkg; import si.pele.microbench.TestRunner; /** * @author peter */ public class PerfTest extends TestRunner { public static boolean isVMAnonymousClass(Class cls) { return cls.getSimpleName().contains("/"); } public static boolean isVMAnonymousClass_FAST1(Class cls) { String name = cls.getName(); for (int i = name.length() - 1; i >= 0; i--) { char c = name.charAt(i); if (c == '.') return false; if (c == '/') return true; } return false; } public static boolean isVMAnonymousClass_FAST2(Class cls) { String name = cls.getName(); for (int i = name.length() - 1; i >= 0; i--) { char c = name.charAt(i); if (c == '/') return true; if (c < '0' || c > '9') return false; } return false; } public static boolean isVMAnonymousClass_indexOf(Class cls) { return cls.getName().indexOf("/") > -1; } public static boolean isVMAnonymousClass_lastIndexOf(Class cls) { return cls.getName().lastIndexOf("/") > -1; } static class Classic$1 {} static final Class classicClass = Classic$1.class; static final Class vmAnonymousClass = ((Runnable) () -> {}).getClass(); public static class isVMAnonymousClass_true extends Test { @Override protected void doLoop(Loop loop, DevNull devNull1, DevNull devNull2, DevNull devNull3, DevNull devNull4, DevNull devNull5) { Class c = vmAnonymousClass; while (loop.nextIteration()) { devNull1.yield(isVMAnonymousClass(c)); } } } public static class isVMAnonymousClass_false extends Test { @Override protected void doLoop(Loop loop, DevNull devNull1, DevNull devNull2, DevNull devNull3, DevNull devNull4, DevNull devNull5) { Class c = classicClass; while (loop.nextIteration()) { devNull1.yield(isVMAnonymousClass(c)); } } } public static class isVMAnonymousClass_FAST1_true extends Test { @Override protected void doLoop(Loop loop, DevNull devNull1, DevNull devNull2, DevNull devNull3, DevNull devNull4, DevNull devNull5) { Class c = vmAnonymousClass; while (loop.nextIteration()) { devNull1.yield(isVMAnonymousClass_FAST1(c)); } } } public static class isVMAnonymousClass_FAST1_false extends Test { @Override protected void doLoop(Loop loop, DevNull devNull1, DevNull devNull2, DevNull devNull3, DevNull devNull4, DevNull devNull5) { Class c = classicClass; while (loop.nextIteration()) { devNull1.yield(isVMAnonymousClass_FAST1(c)); } } } public static class isVMAnonymousClass_FAST2_true extends Test { @Override protected void doLoop(Loop loop, DevNull devNull1, DevNull devNull2, DevNull devNull3, DevNull devNull4, DevNull devNull5) { Class c = vmAnonymousClass; while (loop.nextIteration()) { devNull1.yield(isVMAnonymousClass_FAST2(c)); } } } public static class isVMAnonymousClass_FAST2_false extends Test { @Override protected void doLoop(Loop loop, DevNull devNull1, DevNull devNull2, DevNull devNull3, DevNull devNull4, DevNull devNull5) { Class c = classicClass; while (loop.nextIteration()) { devNull1.yield(isVMAnonymousClass_FAST2(c)); } } } public static class isVMAnonymousClass_indexOf_true extends Test { @Override protected void doLoop(Loop loop, DevNull devNull1, DevNull devNull2, DevNull devNull3, DevNull devNull4, DevNull devNull5) { Class c = vmAnonymousClass; while (loop.nextIteration()) { devNull1.yield(isVMAnonymousClass_indexOf(c)); } } } public static class isVMAnonymousClass_indexOf_false extends Test { @Override protected void doLoop(Loop loop, DevNull devNull1, DevNull devNull2, DevNull devNull3, DevNull devNull4, DevNull devNull5) { Class c = classicClass; while (loop.nextIteration()) { devNull1.yield(isVMAnonymousClass_indexOf(c)); } } } public static class isVMAnonymousClass_lastIndexOf_true extends Test { @Override protected void doLoop(Loop loop, DevNull devNull1, DevNull devNull2, DevNull devNull3, DevNull devNull4, DevNull devNull5) { Class c = vmAnonymousClass; while (loop.nextIteration()) { devNull1.yield(isVMAnonymousClass_lastIndexOf(c)); } } } public static class isVMAnonymousClass_lastIndexOf_false extends Test { @Override protected void doLoop(Loop loop, DevNull devNull1, DevNull devNull2, DevNull devNull3, DevNull devNull4, DevNull devNull5) { Class c = classicClass; while (loop.nextIteration()) { devNull1.yield(isVMAnonymousClass_lastIndexOf(c)); } } } public static void main(String[] args) throws Exception { int minThreads = 1; int maxThreads = 4; startTests(); doAction("Classic class : " + classicClass.getName(), () -> {}); doTest(isVMAnonymousClass_false.class, 2000L, minThreads, maxThreads, 1, 4, 1); doTest(isVMAnonymousClass_FAST1_false.class, 2000L, minThreads, maxThreads, 1, 4, 1); doTest(isVMAnonymousClass_FAST2_false.class, 2000L, minThreads, maxThreads, 1, 4, 1); doTest(isVMAnonymousClass_indexOf_false.class, 2000L, minThreads, maxThreads, 1, 4, 1); // doTest(isVMAnonymousClass_lastIndexOf_false.class, 2000L, minThreads, maxThreads, 1, 4, 1); doAction("VM-anonymous class: " + vmAnonymousClass.getName(), () -> {}); doTest(isVMAnonymousClass_true.class, 2000L, minThreads, maxThreads, 1, 4, 1); doTest(isVMAnonymousClass_FAST1_true.class, 2000L, minThreads, maxThreads, 1, 4, 1); doTest(isVMAnonymousClass_FAST2_true.class, 2000L, minThreads, maxThreads, 1, 4, 1); doTest(isVMAnonymousClass_indexOf_true.class, 2000L, minThreads, maxThreads, 1, 4, 1); // doTest(isVMAnonymousClass_lastIndexOf_true.class, 2000L, minThreads, maxThreads, 1, 4, 1); endTests(); } }