当前使用版本
当前使用版本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
长得一样就等于同一个?