FASTJSON 2.0.x has been released, faster and more secure, recommend you upgrade.
APACHE-2.0 License
Published by wenshao over 8 years ago
进一步提升在android环境下的性能,同时减少内存占用,恢复Stream API,更好兼容之前的版本,jar大小196k,比上一个版本fastjson-1.1.47.android小1k。
测试机器 OPPO R7 plusm 处理器高通MSM8939八核 运行内存3GB
Android版本 5.1.1
测试代码 https://github.com/alibaba/fastjson/tree/1.1.48-android/src/test/java/com/alibaba/json/test/benchmark
首次序列化(1000次) | 首次反序列化 (1000次) | 非首次序列化 (10000次) | 非首次反序列化(10,000次) | |
---|---|---|---|---|
gson-2.6.2 | 5252 | 4813 | 1834 | 1471 |
fastjson-1.1.46.android | 3622 | 3269 | 1050 | 1707 |
fastjson-1.1.47.android | 1197 | 2052 | 659 | 813 |
fastjson-1.1.48.android | 1177 | 1888 | 503 | 758 |
android原生org.json手工 | 1162 | 1206 |
注意,fastjson对key排序的序列化对象做算法特别优化的,服务端和客户端配套使用能得到更好的性能。另外自行构造别的测试case时切记。另外要说明的一点是,在fastjson中自动序列化/反序列化都要比手工构造速度要快。
测试样本是取自 https://github.com/eishay/jvm-serializers/blob/master/tpc/data/media.1.cks ,构造成json字符串487个字符,eishay/jvm-serializers是各个序列化库作者都比较认可的测试用例。具体如下:
{"image":[{"height":768,"size":"LARGE","title":"Javaone Keynote","uri":"http://javaone.com/keynote_large.jpg","width":1024},{"height":240,"size":"SMALL","title":"Javaone Keynote","uri":"http://javaone.com/keynote_small.jpg","width":320}],"media":{"bitrate":262144,"duration":18000000,"height":480,"format":"video/mpg4","size":58982400,"height":480["Bill Gates"][,"Steve Jobs"],"player":"JAVA","size":58982400,"title":"Javaone Keynote","uri":"http://javaone.com/keynote.mpg","width":640}]
fastjson/gson模拟首次序列化反序列化在这里:
https://github.com/alibaba/fastjson/blob/1.1.48-android/src/test/java/com/alibaba/json/test/codec/FastjsonSCodec.java
https://github.com/alibaba/fastjson/blob/1.1.48-android/src/test/java/com/alibaba/json/test/codec/GsonSCodec.java
public <T> T decodeObject(String text, Type clazz) {
return JSON.parseObject(text, //
clazz, //
new ParserConfig(), // 每次new ParserConfig模拟首次
JSON.DEFAULT_PARSER_FEATURE, //
Feature.DisableCircularReferenceDetect);
}
public String encode(Object object) throws Exception {
return JSON.toJSONString(object, //
new SerializeConfig(), // 每次new SerializeConfig模拟首次
SerializerFeature.DisableCircularReferenceDetect);
}
public <T> T decodeObject(String text, Type clazz) {
Gson gson = new Gson(); // 每次new Gson模拟首次
return gson.fromJson(text, clazz);
}
public String encode(Object object) throws Exception {
Gson gson = new Gson(); // 每次new Gson模拟首次
return gson.toJson(object);
}
Published by wenshao over 8 years ago
Android环境下性能大幅度提升,减少内存占用,jar包大小不足200k。
1.1.47-android针对android做了很多性能优化,性能优化包括首次序列化/反序列化,在android环境,序列化的次数较少,不如服务器端多,在此版本中,针对首次序列化和反序列化做了优化大幅提升了性能,当然常规的优化也做了很多。
优化的办法包括:
这个版本去掉了android版本不常用的stream api,去掉了stream api的JSONReader/JSONWriter相关实现。
测试机器 OPPO R7 plusm 处理器高通MSM8939八核 运行内存3GB
Android版本 5.1.1
测试代码 https://github.com/alibaba/fastjson/tree/1.1.47-android/src/test/java/com/alibaba/json/test/benchmark
测试数据
首次序列化 | 首次反序列化 | 非首次序列化 | 非首次反序列化 | |
---|---|---|---|---|
gson-2.6.2 | 5205 | 4897 | 1881 | 1486 |
fastjson-1.1.46-android | 3898 | 3564 | 1174 | 1824 |
fastjson-1.1.47-android | 1280 | 2168 | 723 | 871 |
1、修复嵌套类型最后一个字段是字符串数组并且存在多余空格时反序列化错误的bug。https://github.com/alibaba/fastjson/issues/504
2、直接支持oracle.sql.DATE和oracle.sql.TIMESTAMP两种类型序列化。https://github.com/alibaba/fastjson/issues/503
3、支持中文getter/setter方法名。https://github.com/alibaba/fastjson/issues/502
4、在SerializerFeature.BrowserCompatible打开时,将特大整数变成字符串展示,在javascript中不丢失精度。https://github.com/alibaba/fastjson/issues/498
5、反序列化时支持C风格的字符串。https://github.com/alibaba/fastjson/pull/487
6、支持Builder模式。https://github.com/alibaba/fastjson/wiki/BuilderSupport
Published by oldratlee over 9 years ago
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.4</version>
</dependency>
Release notes: