我正在使用 Google 优秀的 Gson 库来进行 JSON(反)序列化。我正在利用 GsonBuilder 类为某些类创建带有自定义序列化器的 Gson 对象。在部署代码之后,我突然开始出现堆溢出错误。
我研究了堆转储,它指向 GsonBuilder
类的 static Final
对象:
public static final GsonBuilder JSONIFIER_BUILDER = new GsonBuilder().registerTypeAdapter(Article.class, new ArticleSerializer());
要从构建器创建 Gson
对象,我的代码中的多个应用程序正在使用一个方法。
public String serialize(Object contextObject) {
Gson jsonifier = JSONIFIER_BUILDER.registerTypeAdapter(Config.class, new ConfigSerializer(contextObject)).create();
return jsonifier.toJson(this);
}
通过查看堆转储,我只能推断 JSONIFIER_BUILDER
以某种方式引用了它创建的 Gson
对象的所有实例。
有人可以告诉我我的结论是否正确吗?如果是这样,我怎样才能避免这个问题呢?我目前已对代码进行了更改,以便序列化器方法看起来像这样:
public String serialize(Object contextObject) {
Gson jsonifier = new GsonBuilder()
.registerTypeAdapter(Article.class, new ArticleSerializer()).registerTypeAdapter(Config.class, new ConfigSerializer(contextObject)).create();
return jsonifier.toJson(this);
}
最佳答案
public String serialize(Object contextObject) {
Gson jsonifier = JSONIFIER_BUILDER.registerTypeAdapter(Config.class, new ConfigSerializer(contextObject)).create();
return jsonifier.toJson(this);
}
您不断向静态构建器注册新类型。它显然不会覆盖前一个。
关于java - 使用GsonBuilder的静态实例创建Gson实例时发生内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24993258/