Почему этот анализ JSON становится все более и более эффективным? - PullRequest
2 голосов
/ 05 июля 2019

У меня есть функция для анализа JSON в Android. Я использую 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 ]

4 голосов
/ 05 июля 2019

Это может быть связано с тем, как ART (Andorid RunTime) запускает код.

Из документов :

Среда выполнения Android (ART) включает в себяJIT-компилятор с профилированием кода, который постоянно повышает производительность приложений Android во время их работы.JIT-компилятор дополняет текущий опережающий компилятор ART (AOT) и повышает производительность во время выполнения, экономит место на диске и ускоряет обновления приложений и системы.Он также улучшает компилятор AOT, избегая замедления системы во время автоматических обновлений приложений или перекомпиляции приложений во время беспроводных обновлений (OTA).

Хотя JIT и AOT используют один и тот же компилятор с аналогичным набором оптимизацийсгенерированный код может не совпадать.JIT использует информацию о типах времени выполнения, может лучше выполнять вставку и делает возможной компиляцию при замене стека (OSR), которая генерирует немного другой код.

Это означает, что каждый раз, когда ART запускает ваш кодон проанализирует, как он работает и как он может это улучшить.Когда вы выходите из приложения, все эти данные теряются, и они запускаются снова.Это распространено во всех приложениях JVM (виртуальной машины Java).

3 голосов
/ 05 июля 2019

Почему этот JSON-анализ становится все более и более эффективным?

В этом сущность того, что Своевременно компиляторы делают.

Они понимают (через какое-то профилирование или иногда просто подсчет вызовов методов), какие части вашего кода критичны для производительности.В какой-то момент они приходят и переводят байт-код java, например, в собственный машинный код.

Другими словами: скорее всего, когда ваш код делает что-то «достаточно часто», в какой-то момент JIT будет(вероятно, постепенно, в несколько этапов) перекомпилируйте его во все более оптимизированные (машинный код) представления.

...