java - 尝试测试 2 个 JSON 框架的性能 - 它看起来正确吗?

标签 java android json jackson gson

在我的应用程序中 - 我正在使用 JSON 进行序列化,到目前为止 - 我正在使用 GSON。好吧,这有点慢,尤其是在我加载对象的初始登录处。

我探索了各种选择并找到了 jackson 。我通过循环和反序列化 1000 个示例对象进行了快速测试。 jackson 的速度快了 3 到 5 倍。

现在,我构建了包装器,以便可以在库之间切换,并开始测试,同时并排查看我从每个库中获得的内容。这是我的代码:

public static <T> T fromJson(String json, Class<T> classOfT) throws Exception
    {
        T returnObject;

        Long milliseconds = (new Date()).getTime();
        returnObject = MyGsonWrapper.getMyGson().fromJson(json, classOfT);
        Long gsonTime = (new Date()).getTime() - milliseconds;

        milliseconds = (new Date()).getTime();
        returnObject = MyJacksonWrapper.getMyJson().readValue(json, classOfT);
        Long jacksonTime = (new Date()).getTime() - milliseconds;

if (gsonTime < jacksonTime)
        {
            Log.d(LOG_TAG, "------------- GSON Wins by " + Long.toString(jacksonTime - gsonTime) + " object: " + classOfT.getName());
        }
        else
        {
            Log.d(LOG_TAG, "------------- Jackson Wins by " + Long.toString(gsonTime - jacksonTime) + " object: " + classOfT.getName());
        }

我的代码中是否有关于如何获取时间测量的流程? 底线是 - 差异可以忽略不计,GSON 被证明是有效的,所以我不知道.. 现实生活与我最初的评估不同。而且 jackson 也感觉更快..

02-17 10:23:26.068: DEBUG/com.idatt.json.JsonWrapper(12004): ------------- GSON Wins by 108 object: [Lcom.idatt.json.UserPreference;
02-17 10:23:28.006: DEBUG/com.idatt.json.JsonWrapper(12004): ------------- Jackson Wins by 34 object: [Lcom.idatt.json.MailTemplate;
02-17 10:23:29.154: DEBUG/com.idatt.json.JsonWrapper(12004): ------------- GSON Wins by 27 object: [Lcom.idatt.json.MailItem;
02-17 10:23:36.514: DEBUG/com.idatt.json.JsonWrapper(12004): ------------- Jackson Wins by 599 object: [Lcom.idatt.json.TripUser;
02-17 10:23:50.260: DEBUG/com.idatt.json.JsonWrapper(12004): ------------- Jackson Wins by 1 object: [Lcom.idatt.json.TripUpdate;
02-17 10:24:00.455: DEBUG/com.idatt.json.JsonWrapper(12004): ------------- GSON Wins by 45 object: java.lang.Integer
02-17 10:24:00.541: DEBUG/com.idatt.json.JsonWrapper(12004): ------------- GSON Wins by 34 object: [Lcom.idatt.json.Device;

最佳答案

要尝试标准化 VM 动态行为以及热/冷 JVM 造成的差异,请尝试对每个循环运行 10,000 次进行计时,然后查看差异是什么。

另请注意,由于 VM 随机性,第一组代码的运行时间将与第二组代码的运行时间不同;所以翻转这些然后平均时间。

Net-net,我怀疑你会发现任何显着差异。

旁白:如果毫秒有很大差异,请查看 Jackson 和 GSON 提供的流解析,以实现更快的原始访问(但您将负责解析逻辑并重建对象,这可能是净损失)

关于java - 尝试测试 2 个 JSON 框架的性能 - 它看起来正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9331978/

相关文章:

java - 使用java库解析VML Path属性值

java - 安卓设备监控器

Android Studio - 使用支持库呈现 XML 文件的问题

java - Android - JSON 解析未使用 "setText"显示数据

Java 计数 Realm 结果

java - Math.ceil 不舍入值

android - 如何在android中测试应用内购买?

android - Google 从当前位置到已知位置的定向路线

php - 在 php laravel 中将 html 转换为 json

java - 为什么我在 JSF 获取 postgresql boolean 字段时总是得到 NULL?