Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么JSON解析变得越来越高效?_Java_Android_Json_Caching_Jsonparser - Fatal编程技术网

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

Java 为什么JSON解析变得越来越高效?,java,android,json,caching,jsonparser,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")){

我有一个在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...)
}
类名{
公共静态ArrayList parseResponse(字符串响应){
JSONObject responseObject=新的JSONObject(响应);
if(responseObject.has(“someArray”)){
JSONArray someArray=responseObject.getJSONArray(“someArray”);
//等等…等等…我做逻辑
}
}
返回新的DataObjectClass(参数…)
}
现在,我从开始到结束对解析进行计时,每次我再次调用该函数,解析时间都会缩短(除非我退出应用程序并再次访问)


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

这可能与ART(android运行时)如何运行代码有关

发件人:

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

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

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

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

这就是即时编译器的本质

他们理解(通过某种形式的分析,或者有时:简单地计算方法调用)代码的哪些部分是性能关键的。在某个时刻,他们会进来,并将java字节码翻译成本地机器代码

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