make test TEST="micro:" got java.lang.UnsupportedClassVersionError

Liu, Xin xxinliu at amazon.com
Tue Oct 27 09:06:18 UTC 2020


Hi,

I follow the instruction on https://htmlpreview.github.io/?https://github.com/openjdk/jdk/blob/master/doc/testing.html#microbenchmarks to run a new microbenchmark.
I got error message as follows.
java.lang.UnsupportedClassVersionError: Preview features are not enabled for org/openjdk/bench/java/lang/reflect/proxy/jmh_generated/ProxyBench_newProxyInstance1i_jmhTest (class file version 60.65535). Try running with '--enable-preview'
        at java.base/java.lang.ClassLoader.defineClass1(Native Method)
        at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1010)
        at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
        at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:855)
        at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:753)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:676)
        at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:634)
        at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:182)
        at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:519)
        at java.base/java.lang.Class.forName0(Native Method)
        at java.base/java.lang.Class.forName(Class.java:377)
        at org.openjdk.jmh.util.ClassUtils.loadClass(ClassUtils.java:72)
        at org.openjdk.jmh.runner.BenchmarkHandler.<init>(BenchmarkHandler.java:68)
        at org.openjdk.jmh.runner.BaseRunner.runBenchmark(BaseRunner.java:232)
        at org.openjdk.jmh.runner.BaseRunner.doSingle(BaseRunner.java:138)
        at org.openjdk.jmh.runner.BaseRunner.runBenchmarksForked(BaseRunner.java:75)
        at org.openjdk.jmh.runner.ForkedRunner.run(ForkedRunner.java:72)
        at org.openjdk.jmh.runner.ForkedMain.main(ForkedMain.java:84)


If I add an extra flag “—enable-preview” , the micro bench will work.
make test TEST="micro:java.lang.reflect" MICRO="VM_OPTIONS=--enable-preview"

I am using jmh from make/devkit/createJMHBundle.sh, which gives me jmh-core-1.26.jar
Is that jmh-core too old or we should adjust RunTest.gmk a little bit to have that flag?

Does Openjdk CI run benchmarks to detect performance regression?  If so,  could you point me to a guideline of microbenmark?
I lack of the basic sense of a “good” microbenchmark.  My concern is the new micro I added is too long to break the established test run.

Thanks,
--lx




More information about the build-dev mailing list