Closed test-bin-001 closed 1 month ago
频繁GC会导致LambdaFactory产生的类在metaspace中堆积
您好,麻烦能尝试最新版本还有这个问题吗,最好您方便的话帮忙给一个复现Demo供开发定位问题
6.0.0-M8和M14都测试过了,复现就一直gc就行,每次gc之后执行BeanUtil的copyProperties方法LambdaFactory都会生成一批类,但是因为是弱引用,gc后就没了,但是类加载器中类不会被卸载,导致metaspace一直增长
@VampireAchao https://github.com/dromara/hutool/blob/v6-dev/hutool-core/src/main/java/org/dromara/hutool/core/func/LambdaFactory.java#L41 这里使用的是WeakConcurrentMap,GC后就会移除生成的缓存,但是Metaspace中加载的class并不会被卸载而导致的内存泄漏
如图:这些Lambda的class在每次GC后生成都会生成
感谢!修复中
@VampireAchao WeakCache中的对象被回收了,但是Lambda类加载器中的lambda对象没有回收。
@test-bin-001
来自 @CherryRum 的回答:
可以见: https://github.com/openjdk/jdk/pull/12493
https://bugs.openjdk.org/browse/JDK-8302154
jdk15改了 一个隐藏类,和 jdk8的lambda生成方式不同了
可能导致构建的lambda无法正常回收。
6.0.0-M15会改回使用MethodHandler反射方式。
版本情况
JDK版本: openjdk_17 hutool版本: 6.0.0-M8
问题描述(包括截图)