Проблема с производительностью при преобразовании объекта Java в строку JSON в первый раз, он работает нормально во второй раз

#json

#json

Вопрос:

Мне нужно преобразовать объект Java в строку JSON, он работает довольно быстро (25 миллисекунд) в 1 случае и очень медленно в другом случае (2000 миллисекунд). Это фрагмент кода:

 public AuditTrailDetails createAuditTrailDetails(String propertyName, Object oldValue, Object newValue, AuditTrail entity) throws IOException {
    ObjectMapper objectMapper = policyManagerObjectMapper.getObjectMapper();
    String oldValueAsJSON = null;
    String newValueAsJSON = null;

    long startTime = System.currentTimeMillis();
    oldValueAsJSON = (oldValue != null) ? objectMapper
        .writeValueAsString(oldValue) : null;
    long endTime = System.currentTimeMillis();
    log.info("Time taken to convert old value into string is: "   (endTime - startTime));

    startTime = System.currentTimeMillis();
    newValueAsJSON = (newValue != null) ? objectMapper
        .writeValueAsString(newValue) : null;
    endTime = System.currentTimeMillis();
    log.info("Time taken to convert new value into string is: "   (endTime - startTime));
}

@Component public class PolicyManagerObjectMapperImpl implements PolicyManagerObjectMapper {

private ObjectMapper objectMapper = new ObjectMapper();

@Override
public ObjectMapper getObjectMapper() {
 return objectMapper;
}
}
  

Комментарии:

1. Этот createAuditTrailDetails вызывается из 2 мест в коде. В 1-м случае oldValue передается объекту для преобразования, а newValue передается null. Для преобразования требуется много времени (2000 миллисекунд). Во 2-м случае oldValue передается null, а newValue передается объекту для преобразования. Преобразование выполняется довольно быстро (25 миллисекунд). И эта итерация выполняется 2000 раз.

2. Еще одна вещь, которую следует упомянуть, это размер преобразованной строки json составляет 28 КБ (когда она быстрая) и 14 КБ (когда она медленная), так что на самом деле все наоборот. И формат json точно такой же, просто объем данных удваивается. Я не понимаю, почему это происходит.