RFR [XS]: 8248429: Add --enable-preview as VM argument when running microbenchmarks

Jorn Vernee jorn.vernee at oracle.com
Fri Jun 26 22:14:13 UTC 2020


Hi,

https://bugs.openjdk.java.net/browse/JDK-8248135 added --enable-preview 
to the javac options when building micro benchmarks.

We should also add it to the set of default VM arguments passed to the 
microbenchmark jar so it doesn't need to be passed manually.

If --enable-preview is not passed, the microbenchmarks can not be run 
(even the ones that don't use preview features). Since the class files 
have a modified minor version due to building with --enable-preview, the 
VM must also be started with --enable-preview in order to be able to 
load the classes. In the absence of --enable-preview, for instance the 
following error will occur:

java.lang.UnsupportedClassVersionError: Preview features are not enabled 
for 
org/openjdk/bench/jdk/incubator/foreign/generated/CallOverhead_panama_args10_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:1016)
         at 
java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:151)
         at 
java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:825)
         at 
java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:723)
         at 
java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:646)
         at 
java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:604)
         at 
java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:168)
         at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:522)
         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:233)
         at org.openjdk.jmh.runner.BaseRunner.doSingle(BaseRunner.java:139)
         at 
org.openjdk.jmh.runner.BaseRunner.runBenchmarksForked(BaseRunner.java:76)
         at org.openjdk.jmh.runner.ForkedRunner.run(ForkedRunner.java:72)
         at org.openjdk.jmh.runner.ForkedMain.main(ForkedMain.java:84)


Please review the patch attached inline at [1].

Testing: running a microbenchmark without passing '--enable-preview' 
manually and confirming that it doesn't fail to load the classes.

Thanks,
Jorn

[1] :

diff --git a/make/RunTests.gmk b/make/RunTests.gmk
index 721bb827639..59911d89e9f 100644
--- a/make/RunTests.gmk
+++ b/make/RunTests.gmk
@@ -691,7 +691,7 @@ define SetupRunMicroTestBody
    endif

    # Set library path for native dependencies
-  $1_JMH_JVM_ARGS := -Djava.library.path=$$(TEST_IMAGE_DIR)/micro/native
+  $1_JMH_JVM_ARGS := 
-Djava.library.path=$$(TEST_IMAGE_DIR)/micro/native --enable-preview

    ifneq ($$(MICRO_VM_OPTIONS)$$(MICRO_JAVA_OPTIONS), )
      $1_JMH_JVM_ARGS += $$(MICRO_VM_OPTIONS) $$(MICRO_JAVA_OPTIONS)




More information about the build-dev mailing list