【发布时间】:2015-07-15 14:07:31
【问题描述】:
在我的大部分课程(尤其是服务器资源)中,我倾向于按需创建com.google.gson.Gson 的新实例。有时我使用默认构造函数创建它们(用于处理简单的 POJO),有时我使用通过自定义 com.google.gson.GsonBuilder 创建的更复杂的变体。
我知道Gson 是一个线程安全类,所以没有什么反对重复使用Gson 的同一个实例而不是创建新实例。哎呀,我什至可以为此重用一个静态常量!
我的问题是:我应该在需要时创建新实例,还是应该只创建和使用一个?如果我使用 Gson 创建的 GsonBuilder 实例序列化简单 POJO 并教授如何解析更复杂的数据结构(注册的自定义序列化程序很少),我将面临什么样的性能影响?
【问题讨论】:
-
我会在性能之前考虑正确性和可读性。除非您有可靠的基准来证明
Gson实例创建是一个瓶颈,在这种情况下,您可以牺牲一些可读性来换取性能。 -
@biziclop,我完全同意你的评论,但我不明白这个评论在这里是如何适用的。这纯粹是关于每次调用
new Gson()或用静态引用(如JsonUtils.GSON或单例DefaultGson.instance())包装它。 -
我稍微误读了您的问题,我以为您将缓存多个
Gson对象,其中线程安全(正确性)将是一个因素。对不起。 (我不知道Gson的任何详细信息,但在类似情况下,如果有帮助,我倾向于选择单实例解决方案。让事情变得更简单。) -
Retrofit 在
GsonConverterFactory中使用了 Gson 的缓存版本,所以我倾向于认为这比每次都创建一个新版本要好。 -
我实际上已经这样做了很长时间,而且我从未遇到任何问题。拥有一组固定的适配器/序列化器也很有帮助,如果您只有一个实例,则更容易维护。