偶然間看到的阿里出品的Fastjson,網上對這個json包好評如潮,性能勝Jackson10倍。
本人本着眼見爲實的想法,本身測試一下二者的性能比較。java
###測試### POJO對象名字爲User,具體代碼就不貼了,裏面有兩個屬性,分別是int類型的id和String類型的name,很簡單的一個類。算法
測試程序(只是簡單的測試下,這裏並未深究其中的各類構造方法)json
public class MyMain { private static final int TEST_CASE_NUM = 1000; public static void main(String args[]) throws IOException { List<User> users = new ArrayList<User>(); Random random = new Random(); for (int i = 0; i < TEST_CASE_NUM; i++) { User user = new User(); user.setId(random.nextInt(10)); user.setName("123"); users.add(user); } Monitor.begin(); for (User u : users){ String s = JSON.toJSONString(u); } Monitor.end("serilization of fastjson"); Monitor.begin(); /** * 這裏僅建立一個ObjectMapper實例 * 而網上的不少測試程序中,把實例的建立過程 * 加入到了for循環中,所以測出來的序列化性能 * 有10倍之差,其實其中大部分都消耗在了ObejectMapper * 實例建立上。 */ ObjectMapper objectMapper = new ObjectMapper(); for (User u : users){ String s = objectMapper.writeValueAsString(u); } long endjackson = System.currentTimeMillis(); Monitor.end("serilization of jackson"); List<String> strs = new ArrayList<String>(); for (int j = 0; j < TEST_CASE_NUM; j++) { String s = new String("{\"id\":1,\"name\":\"123\"}"); strs.add(s); } Monitor.begin(); for (String s : strs){ User user = JSON.parseObject(s,User.class); } Monitor.end("reading string by fastjson"); Monitor.begin(); ObjectMapper obj = new ObjectMapper(); for (String s : strs){ User user = obj .readValue(s,User.class); } Monitor.end("reading string by jackson"); } }
運行程序獲得輸出:app
serilization of fastjson use 158 ms serilization of jackson use 339 ms reading string by fastjson use 49 ms reading string by jackson use 73 ms
屢次運行後結果相差甚微,比例關係基本保持穩定。因而可知fastjson並未如網上傳言那般,性能較之於jackson提高10倍。若是將ObjectMapper實例的建立過程也從計時器中提取出來,哪麼Jackson與fastjson的序列化性能幾乎相同。
然而在反序列方面,fastjson以巨大的優點領先Jackson,將測試的用例個數增長至1000000,獲得的輸出爲:dom
reading string by fastjson use 505 ms reading string by jackson use 1051 ms
fastjson幾乎只須要Jackson的一半時間,這個表現至關亮眼。性能
在這裏咱們反序列化的字符串是按照實體類中屬性的順序排列的,若是打亂一下順序呢?
這裏仍是使用1000000個測試用例,獲得的輸出結果爲:測試
reading string by fastjson use 715 ms reading string by jackson use 1049 ms
由於fastjson默認開啓了sort field martch優化算法
,打亂順序以後性能降低,但仍然領先Jackson很多。優化
###總結### 此次測試使用的是1.9.31版本的Jackson和1.1.39版本的fasijson,測試結果表名fastjson和Jackson在序列化性能上相差不大(主要ObjectMapper類新建實例耗費很多時間),可是在反序列化方面,fastjson要明顯領先於Jackson。code