RFR [XS]: 8248429: Add --enable-preview as VM argument when running microbenchmarks
Claes Redestad
claes.redestad at oracle.com
Fri Jun 26 23:38:17 UTC 2020
Patch looks fine (although you might want to update the comment).
It's more concerning that I didn't catch this (seems all tests of
mine were with --enable-preview), and we'll still inconvenience users
who need to run the jar file directly. So it seems we should consider
fixing so that only those benchmarks that actually need --enable-preview
are built with that flag.
/Claes
On 2020-06-27 00:21, Jorn Vernee wrote:
> Forgot to attach the JBS link:
> https://bugs.openjdk.java.net/browse/JDK-8248429
>
> Jorn
>
> On 27/06/2020 00:14, Jorn Vernee wrote:
>> 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