gpt4 book ai didi

java - 使用GsonBuilder的静态实例创建Gson实例时发生内存泄漏

转载 作者:行者123 更新时间:2023-12-01 12:42:11 24 4
gpt4 key购买 nike

我正在使用 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);
}

您不断向静态构建器注册新类型。它显然不会覆盖前一个。

GsonBuilder source

关于java - 使用GsonBuilder的静态实例创建Gson实例时发生内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24993258/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com