RFR: 8365588: defineClass that accepts a ByteBuffer does not work as expected [v2]
Xueming Shen
sherman at openjdk.org
Tue Oct 7 19:39:20 UTC 2025
On Tue, 7 Oct 2025 09:59:51 GMT, Alan Bateman <alanb at openjdk.org> wrote:
>> Xueming Shen has refreshed the contents of this pull request, and previous commits have been removed. The incremental views will show differences compared to the previous content of the PR. The pull request contains one new commit since the last revision:
>>
>> 8365588: defineClass that accepts a ByteBuffer does not work as expected
>
> test/jdk/java/lang/ClassLoader/defineClass/DefineClassDirectByteBuffer.java line 32:
>
>> 30: * @build DefineClassDirectByteBuffer
>> 31: * @run junit/othervm --add-opens java.base/java.lang=ALL-UNNAMED -Dmode=Direct DefineClassDirectByteBuffer
>> 32: * @run junit/othervm --add-opens java.base/java.lang=ALL-UNNAMED -Dmode=Heap DefineClassDirectByteBuffer
>
> I think it would be better to use a ParameterizedTest and a method source that give you a good selection of buffers (direct, view of a memory segment, heap, read-only, ...). No need to open java.lang as the class loader in the test can use super.defineClass to invoke the protected method in the super class.
--add-opens java.base/java.lang=ALL-UNNAMED is for the reflective access to "defineClass" of the platform classloader. any better alternative to test the platform classloader's defineClass behavior other than the reflect api?
Method m = ClassLoader.class.getDeclaredMethod(
"defineClass", String.class, ByteBuffer.class, ProtectionDomain.class
);
m.setAccessible(true);
Class<?> clazz = (Class<?>) m.invoke(builtin, null, bb, null);
The dup @run lines are the workaround to test the platform classloader's defineClass on the same target test class class twice, one for the direct bb, one for the heap bb (with 2 separate vm runs). Otherwise the test fails with "java.lang.LinkageError: loader 'platform' attempted duplicate class definition for Greeting."
Does ParameterizedTest support vm/platform classloader isolation for each parameterized test run against the same test with different parameters?
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/27569#discussion_r2411698488
More information about the core-libs-dev
mailing list