为什么此JSON解析变得越来越高效?

时间:2019-07-05 10:47:29

标签: java android json caching jsonparser

我在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代码,但是找不到用于缓存的任何代码。发生在哪里以及如何将其关闭(出于测试目的)

2 个答案:

答案 0 :(得分:4)

这可能与ART(Andorid RunTime)如何运行代码有关。

来自docs

  

Android运行时(ART)包括具有代码概要分析的即时(JIT)编译器,可在运行时不断提高Android应用程序的性能。 JIT编译器是对ART当前最新的提前(AOT)编译器的补充,并提高了运行时性能,节省了存储空间并加快了应用程序和系统的更新速度。通过避免自动应用程序更新期间的系统速度降低或通过空中更新(OTA)更新过程中的应用程序重新编译,它还改进了AOT编译器。

     

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

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

答案 1 :(得分:3)

  

为什么JSON解析变得越来越有效?

这就是及时编译器所做的本质

他们了解(通过某种性能分析,有时甚至是:简单地计数方法调用)代码中哪些部分对性能至关重要。有时,它们会进入,并将java字节码转换为本地机器代码。

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

相关问题