Оптимизировать использование оперативной памяти в процессе слияния двух сложных JSON с Джексоном - PullRequest
0 голосов
/ 18 января 2019

В моем приложении для Android я должен объединить две разные структуры json, загруженные из двух разных API, с модификацией.Эти структуры json составлены из другого дерева json.

В настоящее время я храню результаты этих двух API в двух разных свойствах ObjectNode и в двух разных файлах на диске, я беру два объекта ObjectNode и передаю их этому методу:

  public JsonNode merge(JsonNode dst, JsonNode jsonToMerge) {

    JsonNode node;
    Iterator<String> fieldNames = dst.fieldNames();
    while (fieldNames.hasNext()) {
      String fieldName = fieldNames.next();
      node = dst.get(fieldName);

      if (jsonToMerge != null && jsonToMerge.has(fieldName)) {

        Iterator<Map.Entry<String, JsonNode>> singleKey =
                jsonToMerge.get(fieldName).fields();
        while (singleKey.hasNext()) {
          Map.Entry<String, JsonNode> entry =
                  singleKey.next();
          if (node.isArray()) {
            //noinspection ConstantConditions
            ((ArrayNode)
                    node).set(Integer.valueOf(entry.getKey()), entry.getValue());
          } else {
            //noinspection ConstantConditions
            ((ObjectNode) node).set(entry.getKey(),
                    entry.getValue());
          }
        }

      }
    }
    if (jsonToMerge != null) {
      fieldNames = jsonToMerge.fieldNames();
      while (fieldNames.hasNext()) {
        String fieldName = fieldNames.next();
        JsonNode temp = jsonToMerge.get(fieldName);
        if (!dst.has(fieldName)) {
          ((ObjectNode) dst).set(fieldName, temp);
        }
      }
    }

    return dst;
  }

К сожалению, этот процесс массово использует ram, и gc часто запускается.Как я могу оптимизировать этот процесс слияния?У вас есть предложение?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...