【发布时间】:2014-10-08 15:53:18
【问题描述】:
Internet 上的多篇文章指出,Jackson 的解析性能比 GSON 更好,速度大约提高了 20-30%。
- http://rick-hightower.blogspot.com/2014/04/new-json-serialization-benchmark.html
- http://tuhrig.de/jaxb-vs-gson-and-jackson/
- http://java.dzone.com/articles/be-lazy-productive-android
取出我们的 GSON 解析器并用 Jackson 替换导致我的项目速度减慢了 7 倍,每次调用的延迟超过 300 毫秒。 GSON 上的相同解析作业耗时不到 50 毫秒。
我浏览了 Jackson Wiki 上的“陷阱”列表,但没有任何东西作为危险信号。
例如,我没有重新创建 ObjectMapper,而是使用 ObjectReader 读取所有 JSON。下面是一些示例代码:
public class JsonParser {
@Nonnull
private final ObjectMapper objectMapper;
public JsonParser() {
final ObjectMapper objectMapper = new ObjectMapper();
objectMapper.setDateFormat(DateFormatUtil.getGmtIso8601DateFormat());
SimpleModule simpleModule = new SimpleModule();
objectMapper.registerModule(simpleModule);
this.objectMapper = objectMapper;
}
public <T> T fromJson(InputStream inputStream, Class<T> clazz) throws IOException {
ObjectReader reader = objectMapper.reader(clazz);
return reader.readValue(inputStream);
}
}
上面的对象被创建一次,并在应用程序期间用于将 JSON 转换为 POJO。可以在此处查看示例 POJO:
@JsonSerialize(include= Inclusion.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public class ActivityEntity {
public ActivityObjectEntity actor;
public ActivityObjectEntity object;
public ActivityObjectEntity provider;
public ActivityObjectEntity target;
public ActivityObjectEntity generator;
public String content;
public String title;
public String verb;
public String url;
public Date published;
public Date updated;
// other properties omitted ...
}
被序列化的其实是上述项目的列表。
这是我每次运行的示例跟踪视图窗口。请注意,这不是异常。从 Gson 和 Jackson 解析相同的数据集时,我始终获得相同的性能顺序。
比较的是 Jackson 2.4.2 和 Gson 2.2.4
【问题讨论】:
标签: android json performance jackson gson