ObjectMapper SerializerCache的单个实例中的对象太多导致内存泄漏

时间:2016-08-03 13:21:50

标签: spring-boot jackson objectmapper

我们正在运行基于Spring Boot的服务,我们在运行性能测试时遇到GC问题。当我们查看Eclipse插件"内存分析工具包"上的堆转储时(MAT),我们在下面找到:

One instance of "com.fasterxml.jackson.databind.ObjectMapper" loaded by "org.apache.catalina.loader.WebappClassLoader @ 0x1000050b8" occupies 2,057,443,904 (93.15%) bytes. The memory is accumulated in one instance of "com.fasterxml.jackson.databind.ser.SerializerCache" loaded by "org.apache.catalina.loader.WebappClassLoader @ 0x1000050b8".
Keywords
com.fasterxml.jackson.databind.ser.SerializerCache
com.fasterxml.jackson.databind.ObjectMapper
org.apache.catalina.loader.WebappClassLoader @ 0x1000050b8

不确定这里发生了什么。为什么SerializerCache会在Map中保留这么多对象,以及如何清除它。

使用 SpringIO:2.0.6.RELEASE

1 个答案:

答案 0 :(得分:1)

SpringIO 2.0.6.RELEASE使用jackson版本2.6.7,顺便说一句,它并没有显示在master分支(https://github.com/FasterXML/jackson-databind/blob/master/release-notes/VERSION)的Jackson发布页面上。 我将我的应用程序升级为使用jackson版本2.8.1并修复了问题。