【问题标题】:Why is this JSON Parsing becoming more and more efficient?为什么这个 JSON Parsing 越来越高效了?
【发布时间】:2019-11-16 00:00:00
【问题描述】:

我有一个函数可以在 android 中解析 JSON。我使用 org.json 进行解析。

是这样的:

class ClassName {

public static ArrayList<DataObjectClass> parseResponse(String response){

    JSONObject responseObject = new JSONObject(response);
    if(responseObject.has("someArray")){
        JSONArray someArray = responseObject.getJSONArray("someArray");
        // etc... etc... and i do logic
        }
    }
    return new DataObjectClass(params...)
}

现在我从头到尾定时解析,每次我再次调用该函数时,解析时间都会减少(除非我退出应用程序并再次访问)

我检查了JSONTokener 代码和JSONObject 代码,但找不到任何缓存代码。这是在哪里发生的,我该如何关闭它(出于测试目的)

【问题讨论】:

    标签: java android json caching jsonparser


    【解决方案1】:

    这可能与 ART(Andorid RunTime) 运行代码的方式有关。

    来自docs

    Android 运行时 (ART) 包含一个即时 (JIT) 编译器,该编译器具有代码分析功能,可在 Android 应用程序运行时不断提高它们的性能。 JIT 编译器补充了 ART 当前的提前 (AOT) 编译器,提高了运行时性能,节省了存储空间,并加速了应用程序和系统更新。它还改进了 AOT 编译器,避免在自动应用程序更新期间系统变慢或在无线 (OTA) 更新期间重新编译应用程序。

    尽管 JIT 和 AOT 使用具有相似优化集的相同编译器,但生成的代码可能并不相同。 JIT 使用运行时类型信息,可以进行更好的内联,并使堆栈替换 (OSR) 编译成为可能,所有这些都会生成略有不同的代码。

    这意味着每次 ART 运行您的代码时,它都会分析它的运行方式以及如何改进它。当您退出您的应用程序时,所有数据都会丢失并重新启动。这在所有 JVM(Java 虚拟机)应用程序中都很常见。

    【讨论】:

      【解决方案2】:

      为什么这个 JSON Parsing 越来越高效了?

      这就是及时编译器所做的精髓

      他们了解(通过某种分析,或者有时:简单地计算方法调用)您的代码的哪些部分对性能至关重要。在某些时候,它们会进来,例如将 java 字节码翻译成本机机器码。

      换句话说:最有可能的是,当您的代码“经常”执行某项操作时,JIT 会在某个时候(可能逐步,分多个步骤)将其重新编译为越来越优化的(机器代码)表示。

      【讨论】:

        猜你喜欢
        • 2021-08-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多