我使用Google的优秀Gson库进行JSON(反)序列化。我正在利用GsonBuilder
类为某些类创建带有自定义序列化程序的Gson
对象。在部署代码之后的某个时刻,我突然开始出现Heap Overflow错误。
我研究了堆转储,它指向static final
类的GsonBuilder
对象:
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);
}
答案 0 :(得分:1)
public String serialize(Object contextObject) {
Gson jsonifier = JSONIFIER_BUILDER.registerTypeAdapter(Config.class, new ConfigSerializer(contextObject)).create();
return jsonifier.toJson(this);
}
您不断向静态构建器注册新类型。它显然没有覆盖前一个。