ASMSerializerFactory-createJavaBeanSerializer可能会导致Metaspace内存泄漏
方法体中: Class<?> serializerClass = classLoader.defineClassPublic(classNameFull, code, 0, code.length); 未判断是否存在同名的类,直接就进行定义,可能会导致重复定义,引发MetaSpace内存溢出。 建议是否增加判断:先findLoadedClass,然后再确认是否进行定义。
环境:JDK8、FastJson1.2.73

Caused by: java.lang.OutOfMemoryError: Metaspace at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_91] at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[?:1.8.0_91] at com.alibaba.fastjson.util.ASMClassLoader.defineClassPublic(ASMClassLoader.java:174) ~[fastjson-1.2.83-jdsec.rc1.jar:?] at com.alibaba.fastjson.serializer.ASMSerializerFactory.createJavaBeanSerializer(ASMSerializerFactory.java:409) ~[fastjson-1.2.83-jdsec.rc1.jar:?] at com.alibaba.fastjson.serializer.SerializeConfig.createASMSerializer(SerializeConfig.java:90) ~[fastjson-1.2.83-jdsec.rc1.jar:?] at com.alibaba.fastjson.serializer.SerializeConfig.createJavaBeanSerializer(SerializeConfig.java:252) ~[fastjson-1.2.83-jdsec.rc1.jar:?] at com.alibaba.fastjson.serializer.SerializeConfig.createJavaBeanSerializer(SerializeConfig.java:118) ~[fastjson-1.2.83-jdsec.rc1.jar:?] at com.alibaba.fastjson.serializer.SerializeConfig.getObjectWriter(SerializeConfig.java:821) ~[fastjson-1.2.83-jdsec.rc1.jar:?]
@wuwen5 @wenshao
@nirvanareborn 问题的关键 为什么相同的类。会走到这里两遍。
请提供完整的栈信息和可复现的代码,以便检查是否存在用法问题。请确认是否使用了自定义实例化的 SerializeConfig,并确保 SerializeConfig 是单一实例。默认情况下,SerializeConfig.globalInstance 是一个单例。
怀疑在每次调用时都实例化了一个新的 SerializeConfig。
@wenshao
dump信息:随便找了一个JSON输出类。很多类都没有引用。只是创建了。如果按照您说SerializeConfig有多个。那么dump信息里面的 类信息肯定都有引用。 而且我也多次检查了代码,没有SerializeConfig。并且在dump文件中 也只有1个SerializeConfig类,和一个SerializeConfig对象(见下图)。。。很奇怪了。。比较紧急。版本:1.2.83
堆栈信息
01-30 10:11:15.331 [storeCallable-7-98] ERROR com.xx.mti.shop.core.service.promotion.impl.PromotionServiceImpl - 2162325.39397.17065806682778673 - [获取门店弹层减运限购异常] venderId=10355037 storeId=1000335488 java.lang.RuntimeException: java.lang.OutOfMemoryError: Metaspace at com.xx.mti.shop.core.service.promotion.impl.PromotionServiceImpl.tolayerReduceFreightDtoList(PromotionServiceImpl.java:666) ~[shop-domain-core-2.0.0-SNAPSHOT.jar:2.0.0-SNAPSHOT] at com.xx.mti.shop.core.service.promotion.impl.PromotionServiceImpl.getlayerReduceFreightList(PromotionServiceImpl.java:556) ~[shop-domain-core-2.0.0-SNAPSHOT.jar:2.0.0-SNAPSHOT] at com.xx.mti.shop.core.service.promotion.impcreateJavaBeanSerializerl.PromotionServiceImpl.lambda$getAll$5(PromotionServiceImpl.java:1060) ~[shop-domain-core-2.0.0-SNAPSHOT.jar:2.0.0-SNAPSHOT] at com.xx.pfinder.plugin.sdk.v1_2.impl.trace.PfinderSdkWrappedCallable.call(PfinderSdkWrappedCallable.java:44) ~[pfinder-profiler-agent-20221231.3.jar:20221231.3] at com.alibaba.ttl.TtlCallable.call(TtlCallable.java:65) ~[server-sdk-1.1.8.jar:?] at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[?:1.8.0_91] at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[?:1.8.0_91] at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[?:1.8.0_91] at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:138) ~[netty-all-4.1.13.Final.jar:4.1.13.Final] at java.lang.Thread.run(Thread.java:745) ~[?:1.8.0_91] Caused by: java.lang.OutOfMemoryError: Metaspace at java.lang.ClassLoader.defineClass1(Native Method) ~[?:1.8.0_91] at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[?:1.8.0_91] at com.alibaba.fastjson.util.ASMClassLoader.defineClassPublic(ASMClassLoader.java:174) ~[fastjson-1.2.83-xxsec.rc1.jar:?] at com.alibaba.fastjson.serializer.ASMSerializerFactory.createJavaBeanSerializer(ASMSerializerFactory.java:409) ~[fastjson-1.2.83-xxsec.rc1.jar:?] at com.alibaba.fastjson.serializer.SerializeConfig.createASMSerializer(SerializeConfig.java:90) ~[fastjson-1.2.83-xxsec.rc1.jar:?] at com.alibaba.fastjson.serializer.SerializeConfig.createJavaBeanSerializer(SerializeConfig.java:252) ~[fastjson-1.2.83-xxsec.rc1.jar:?] at com.alibaba.fastjson.serializer.SerializeConfig.createJavaBeanSerializer(SerializeConfig.java:118) ~[fastjson-1.2.83-xxsec.rc1.jar:?] at com.alibaba.fastjson.serializer.SerializeConfig.getObjectWriter(SerializeConfig.java:821) ~[fastjson-1.2.83-xxsec.rc1.jar:?] at com.alibaba.fastjson.serializer.SerializeConfig.getObjectWriter(SerializeConfig.java:440) ~[fastjson-1.2.83-xxsec.rc1.jar:?] at com.alibaba.fastjson.serializer.JSONSerializer.getObjectWriter(JSONSerializer.java:448) ~[fastjson-1.2.83-xxsec.rc1.jar:?] at com.alibaba.fastjson.serializer.ListSerializer.write(ListSerializer.java:128) ~[fastjson-1.2.83-xxsec.rc1.jar:?] at com.alibaba.fastjson.serializer.JSONSerializer.write(JSONSerializer.java:312) ~[fastjson-1.2.83-xxsec.rc1.jar:?] at com.alibaba.fastjson.JSON.toJSONString(JSON.java:793) ~[fastjson-1.2.83-xxsec.rc1.jar:?] at com.alibaba.fastjson.JSON.toJSONString(JSON.java:731) ~[fastjson-1.2.83-xxsec.rc1.jar:?] at com.alibaba.fastjson.JSON.toJSONString(JSON.java:688) ~[fastjson-1.2.83-xxsec.rc1.jar:?] at com.xx.mti.shop.core.service.promotion.impl.PromotionServiceImpl.tolayerReduceFreightDtoList(PromotionServiceImpl.java:687) ~[shop-domain-core-2.0.0-SNAPSHOT.jar:2.0.0-SNAPSHOT] at com.xx.mti.shop.core.service.promotion.impl.PromotionServiceImpl.getlayerReduceFreightList(PromotionServiceImpl.java:556) ~[shop-domain-core-2.0.0-SNAPSHOT.jar:2.0.0-SNAPSHOT] at com.xx.mti.shop.core.service.promotion.impl.PromotionServiceImpl.lambda$getAll$5(PromotionServiceImpl.java:1060) ~[shop-domain-core-2.0.0-SNAPSHOT.jar:2.0.0-SNAPSHOT] at com.xx.mti.shop.core.service.promotion.impl.PromotionServiceImpl$$Lambda$1230/550405672.call(Unknown Source) ~[?:?] ... 7 more
@wuwen5 图片上传不上去。已发您邮件。十分感谢