On Thu, 3 Nov 2022 16:48:36 GMT, Mandy Chung <mch...@openjdk.org> wrote:

>> This change adds an option **EnableWaitForParallelLoad** to enable the 
>> legacy behavior where the VM will manage synchronization for multiple 
>> threads loading the same class using a non-parallel capable class loader 
>> that have released the class loader lock.  The VM will break the class 
>> loader lock for parallel threads trying to load the class, and wait for the 
>> first thread that initiated loading the class to complete.  The subsequent 
>> threads will use the result of the first thread, rather than get a 
>> LinkageError: duplicate class definition for loading the class without 
>> synchronization.
>> Releasing the class loader lock was a common workaround for class loaders 
>> that used a non-hierarchical delegation scheme to avoid deadlock, before 
>> parallel capable class loading was added. 
>> https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/ClassLoader.html#registerAsParallelCapable()
>> 
>> Tested with tier1-6 and internal applications.
>
> Adding core-libs-dev so that more developers know this behavioral change. 
> 
> *Background:*
> 
> Prior to JDK 7, custom class loaders using non-hierarchical class delegation 
> model were prone to deadlock (see [1] for details).   This workaround was 
> added in the VM in JDK 6 to allow parallel class loading for 
> non-parallel-capable class loaders to avoid deadlocks.  The VM also supports 
> a common workaround at the time that some customers explicitly issue a wait() 
> on the class loader lock.
> 
> Such workaround was kept to allow those customers to migrate to using 
> multi-thread-safe parallel-capable class loaders.  It has been 11 years since 
> Java 7 and it's expected that those deadlock-prone custom class loaders 
> should have migrated to the parallel-capable class loaders. 
> 
> If customers have class loaders depending on this legacy behavior, they can 
> set `-XX:+EnableWaitForParallelLoad` flag to enable the legacy behavior and 
> migrate to parallel-capable class loaders as soon as possible.  The 
> `EnableWaitForParallelLoad` VM flag will be removed in a future release.
> 
> Refers to CSR [JDK-8295848](https://bugs.openjdk.org/browse/JDK-8295848) for 
> details.

Thank you for the discussions, CSR, help and code reviews, @mlchung and 
@dholmes-ora .

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

PR: https://git.openjdk.org/jdk/pull/10832

Reply via email to