SlideShare a Scribd company logo
1 of 13
*
Json解析库评测
主要讲三个方面
1 对比jackson、gson、fastjson在jvm、dalvik、art虚拟机上的
性能
2 jackson、gson、fastjson介绍
3 jackson最佳实践
benchmark
http://lightai.github.io/2016/03/28/json-benchmark/
Java虚拟benchmark的难点
1 jit优化、多层次优化
2 很难获取代码精确的执行时间,system.nanotime本身时间
开销很大
3 gc
不能很好的处理以上因素的影响,会导致测试结果不准确,甚
至得出错误的结论。
讲一讲反射
反射性能低主要两个原因:
1 换取遍历field、method、annotation,执行field的set、get
方法
2 jit不能很好的优化反射代码
反射开销也跟反射占比有很大关系。
ASM
 ASM是一个 Java 字节码操控框架。它能被用来动态生成类
或者增强既有类的功能。ASM 可以直接产生二进制 class 文
件,也可以在类被加载入 Java 虚拟机之前动态改变类行为。
 ASM能够通过改造既有类,直接生成需要的代码。增强的代
码是硬编码在新生成的类文件内部的,没有反射带来性能上
的付出。
 ASM可以用来实现AOP。
Fastjson特点
Fastjson所谓的fast主要是通过ASM自动生成反序列化字节码,
减少反射开销,理论上可以提高20%的性能。
Fastjson在其他json解析管线上的优化很一般。
ASM不支持android下的虚拟机,fastjson在android性能最差。
在hotspot上性能比gson稍好,低于jackson。
虚拟机 是否支持
Oracle Hotspot 支持
dalvik 不支持
lemur 不支持
Gson特点
Gson是lite版的jackson,短平快。
Gson安装包小,运行时内存占用少。
相比于jackson,gson的json解析管线优化较少,运行时性能
比jackson差。
Android上如果不需要大量的解析json,可以考虑使用gson,
因为其资源占用少,功能性能够用。
jackson特点
基于stream的api
高性能
支持丰富的功能
丰富的扩展,例如afterburner和fastjson一样都是基于asm的
字节码生成减少反射开销
Jackson最佳实践
1 复用ObjectMapper、JsonFactory对象。
2 优先使用byte[]、其次inputstream、reader,最好不要转化
为string再去反序列化。
3 优先使用ObjectReader、ObjectWriter。
Jackson注意事项for android
用同一个线程做json的解析,参考
https://github.com/FasterXML/jackson-core/issues/67
移动端面临的问题
冷启动问题
 由于dalvik、ART虚拟机无反射缓存时性能很差,第一次反序
列化json会有很大的时间开销。参考:link。
资源占用问题
 jackson、gson对象会做反射缓存,占用堆空间,jackson比
gson占用内存更大。
 解决方案:jackson、gson对象使用单例模式做复用,使用软
引用单利对象,允许java内存不够时回收这些内存。
参考资料
string.intern
fastjson asm设计
jackson performance
Performance overhead of databinding

More Related Content

More from 朋 王

有钱Android索引优化调研总结
有钱Android索引优化调研总结有钱Android索引优化调研总结
有钱Android索引优化调研总结朋 王
 
Android系统内存管理介绍(上)
Android系统内存管理介绍(上)Android系统内存管理介绍(上)
Android系统内存管理介绍(上)朋 王
 
Android线程简介
Android线程简介Android线程简介
Android线程简介朋 王
 
Android chromium web view
Android chromium web viewAndroid chromium web view
Android chromium web view朋 王
 
introduce Okhttp
introduce Okhttpintroduce Okhttp
introduce Okhttp朋 王
 
networking performance
networking performancenetworking performance
networking performance朋 王
 

More from 朋 王 (6)

有钱Android索引优化调研总结
有钱Android索引优化调研总结有钱Android索引优化调研总结
有钱Android索引优化调研总结
 
Android系统内存管理介绍(上)
Android系统内存管理介绍(上)Android系统内存管理介绍(上)
Android系统内存管理介绍(上)
 
Android线程简介
Android线程简介Android线程简介
Android线程简介
 
Android chromium web view
Android chromium web viewAndroid chromium web view
Android chromium web view
 
introduce Okhttp
introduce Okhttpintroduce Okhttp
introduce Okhttp
 
networking performance
networking performancenetworking performance
networking performance
 

Json解析库性能评测