On Thu, 9 Feb 2023 15:20:23 GMT, Volker Simonis <simo...@openjdk.org> wrote:

> Prior to 
> [JDK-8239384](https://bugs.openjdk.org/browse/JDK-8239384)/[JDK-8238358](https://bugs.openjdk.org/browse/JDK-8238358)
>  LambdaMetaFactory has created VM-anonymous classes which could easily be 
> unloaded once they were not referenced any more. Starting with JDK 15 and the 
> new "hidden class" based implementation, this is not the case any more, 
> because the hidden classes will be strongly tied to their defining class 
> loader. If this is the default application class loader, these hidden classes 
> can never be unloaded which can easily lead to Metaspace exhaustion (see the 
> [test case in the JBS 
> issue](https://bugs.openjdk.org/secure/attachment/102601/LambdaClassLeak.java)).
>  This is a regression compared to previous JDK versions which some of our 
> applications have been affected from when migrating to JDK 17.
> 
> The reason why the newly created hidden classes are strongly linked to their 
> defining class loader is not clear to me. JDK-8239384 mentions it as an 
> "implementation detail":
> 
>> *4. the lambda proxy class has the strong relationship with the class loader 
>> (that will share the VM metaspace for its defining loader - implementation 
>> details)*
> 
> From my current understanding the strong link between a hidden class created 
> by `LambdaMetaFactory` and its defining class loader is not strictly 
> required. In order to prevent potential OOMs and fix the regression compared 
> the JDK 14 and earlier I propose to create these hidden classes without the 
> `STRONG` option.
> 
> I'll be happy to add the test case as JTreg test to this PR if you think that 
> would be useful.

This pull request has been closed without being integrated.

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

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

Reply via email to