Fastjson的JSON()解析复杂对象发⽣内存泄漏问题
  这可能是fastjson的⼀个bug,我使⽤最新版依然存在该问题。
  在⽤做报表功能的时候,发现⼀旦单元格过多,⼤概有80-100个单元格,就会发⽣程序假死,CPU持续占⽤超过90%,内存持续占⽤超90%的情况,主要是报表页⾯⽆法⽣
成,这已经对我的业务产⽣了影响,不得不解决这个问题。
  查看之前的代码逻辑,发现原来的处理⽅式是直接⽤
object对象过于复杂和⼤量时,⽤toJSOn解析就会出现CPU、内存⼀直飙升,JVM⼀直执⾏GC操作,但是⽆法回收内存,最后会报
java.lang.OutOfMemoryError: GC overhead limit exceeded 错误。
  看到这⾥,我觉得这个内存泄漏问题我是不是可以直接修改JVM参数来扩⼤⼀下堆内存,设置后重新尝
试了⼀下,结果是⼀样的,没有效果。也从⽹上搜索到了说设置-XX:-UseGCOverheadLimit参数可以解决,试了也⽆果。然后就开始⽤mat分  com.alibaba.fastjson.util.IdentityHashMap产⽣了⼤量ResolvableType
  这是因为IdentityHashMap 使⽤ System.identityHashCode作为key,⽽没有使⽤ ResolvableType的hash值
  这种情况主要的出现场景就是json解析的时候采⽤了泛型,泛型类没有直接指定具体类型。
  问题已经到了,该解决了。我的解决⽅式是换成jackson解析,⾄于改fastjson源码我没有去试。
  我的解决⽅式:
ObjectMapper mapper = new ObjectMapper();
//这⾥的JSONObject 我⽤的是fastjson的JSONObject,cell就是我需要解析的实体Map,其他类型的实体看具体情况具体分析
object toJSONObject object = adValue(mapper.writeValueAsBytes(cell), JSONObject.class);
  结束

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。