RFR: 8242888: Convert dynamic proxy to hidden classes

ExE Boss duke at openjdk.org
Mon May 27 00:12:04 UTC 2024


On Thu, 23 May 2024 03:28:30 GMT, Chen Liang <liach at openjdk.org> wrote:

> Please review this change that convert dynamic proxies implementations to hidden classes, intended to target JDK 24.
> 
> Summary:
> 1. Adds new implementation while preserving the old implementation behind `-Djdk.reflect.useLegacyProxyImpl=true` in case there are compatibility issues.
> 2. ClassLoader.defineClass0 takes a ClassLoader instance but discards it in native code; I updated native code to reuse that ClassLoader for Proxy support.
> 3. ProxyGenerator changes mainly involve using Class data to pass Method list (accessed in a single condy) and removal of obsolete setup code generation.
> 
> Testing: tier1 and tier2 have no related failures.
> 
> Comment: Since #8278, Proxy has been converted to ClassFile API, and infrastructure has changed; now, the migration to hidden classes is much cleaner and has less impact, such as preserving ProtectionDomain and dynamic module without "anchor classes", and avoiding java.lang.invoke package.

`useLegacyProxyImpl && !useOldSerializableConstructor` would always be `false` when `useOldSerializableConstructor` is `true`, which is the opposite of what’s described in the CSR.

src/java.base/share/classes/jdk/internal/reflect/ReflectionFactory.java line 557:

> 555:     public static boolean useLegacyProxyImpl() {
> 556:         var config = config();
> 557:         return config.useLegacyProxyImpl && !config.useOldSerializableConstructor;

Suggestion:

        return config.useLegacyProxyImpl || config.useOldSerializableConstructor;

src/java.base/share/classes/jdk/internal/reflect/ReflectionFactory.java line 624:

> 622:             "true".equals(props.getProperty("jdk.disableSerialConstructorChecks"));
> 623: 
> 624:         useLegacyProxyImpl &= !useOldSerializableConstructor;

Suggestion:

        useLegacyProxyImpl |= useOldSerializableConstructor;

-------------

PR Review: https://git.openjdk.org/jdk/pull/19356#pullrequestreview-2079825251
PR Review Comment: https://git.openjdk.org/jdk/pull/19356#discussion_r1615362157
PR Review Comment: https://git.openjdk.org/jdk/pull/19356#discussion_r1615362271


More information about the core-libs-dev mailing list