我应该重用一个 GSON 实例还是按需创建新实例?
Should I reuse one instance of GSON or create new ones on demand?
在我的大多数 classes(尤其是服务器资源)中,我倾向于根据需要创建 com.google.gson.Gson
的新实例。有时我使用默认构造函数创建它们(用于处理简单的 POJO),有时我使用通过自定义 com.google.gson.GsonBuilder
.
创建的更复杂的变体
我知道 Gson
是线程安全的 class,因此没有人反对重用 Gson
的相同实例而不是创建新实例。哎呀,我什至可能为此重用一个静态常量!
我的问题是:我应该在需要时创建新实例,还是应该只创建和使用一个实例?如果我使用使用 GsonBuilder
创建的 Gson
实例序列化简单的 POJO 并教授如何解析更复杂的数据结构(注册的自定义序列化器很少),我将面临什么样的性能影响?
我知道这是一个老问题,但为了将来参考,这个问题的答案是如果可能的话,你应该选择单一实例。
创建 GSON 对象的成本很高,具体取决于您向其注册的自定义 deserializer/serializer/handlers 数量。我怀疑您是否会因此看到任何重大的性能提升。
关于第二个问题,GSON 内部有一个已注册的序列化器列表,每个序列化器都会根据您要解析的对象进行检查。因此,基本上每次注册自定义序列化程序时都会添加更多迭代,但同样,与将几个笨拙的大对象存入内存相比,这不是一个大的性能问题。
在我的大多数 classes(尤其是服务器资源)中,我倾向于根据需要创建 com.google.gson.Gson
的新实例。有时我使用默认构造函数创建它们(用于处理简单的 POJO),有时我使用通过自定义 com.google.gson.GsonBuilder
.
我知道 Gson
是线程安全的 class,因此没有人反对重用 Gson
的相同实例而不是创建新实例。哎呀,我什至可能为此重用一个静态常量!
我的问题是:我应该在需要时创建新实例,还是应该只创建和使用一个实例?如果我使用使用 GsonBuilder
创建的 Gson
实例序列化简单的 POJO 并教授如何解析更复杂的数据结构(注册的自定义序列化器很少),我将面临什么样的性能影响?
我知道这是一个老问题,但为了将来参考,这个问题的答案是如果可能的话,你应该选择单一实例。
创建 GSON 对象的成本很高,具体取决于您向其注册的自定义 deserializer/serializer/handlers 数量。我怀疑您是否会因此看到任何重大的性能提升。
关于第二个问题,GSON 内部有一个已注册的序列化器列表,每个序列化器都会根据您要解析的对象进行检查。因此,基本上每次注册自定义序列化程序时都会添加更多迭代,但同样,与将几个笨拙的大对象存入内存相比,这不是一个大的性能问题。