当前使用版本

当前使用版本3.0.6

该问题是怎么引起的?

com.baomidou.mybatisplus.core.toolkit.LambdaUtils #resolve此类存在严重BUG,序列化Lambda存在一个ConcurrentHashMap的缓存,用于缓存SFunction引用的序列化Lambda对象,经过测试代码发现缓存 一直命不中,原因是因为对象引用的实例sfunction调用getClass方法,同一份SFunction实例获取到的class对象不一样 ;测试代码如下:

   public static void main(String[] args) {
        SerializedLambda serializedLambda = LambdaUtils.resolve(User::getAge);
        SerializedLambda serializedLambda1 = LambdaUtils.resolve(User::getAge);
    }

重现步骤

只需要运行以上程序,debug进入LambdaUtils就会发现缓存一直不会被命中。具体请详细查看成员变量com.baomidou.mybatisplus.core.toolkit.LambdaUtils #FUNC_CACHE

报错信息

导致结果:可能随着调用LambdaUtils#resolove次数的增加的而导致内存发生OOM

建议: 1 建议去掉缓存,避免OOM

Comment From: miemieYaho

长得一样就等于同一个?