Объект, возвращаемый из запроса OQL в jhat, не соответствует запросу

В нашей команде запущен Java-процесс (на 64-битном сервере OpenJDK 1.8.0_171-b10), в котором происходят некоторые необъяснимые вещи, связанные со значением (в штучной упаковке) Long объекты. Мы создали дамп кучи для анализа jhat и тут происходит нечто действительно странное.

имеющий jhat в процессе работы мы выдаем один из следующих запросов OQL:

  • select l from java.lang.Long l where l.value.toString().equals("20180919141719600")
  • select l from java.lang.Long l where l.value == 20180919141719600

В результате оба возвращаются одни и те же три объекта. Тем не менее, когда мы проверяем объекты, все три имеют разные значения в value и ни один из этих равных 20180919141719600,

Это само по себе беспокоит нас и составляет суть нашего вопроса.

Кроме того, мы можем сделать ситуацию немного интереснее. Кажется, что работающий Java-код использует фактические значения (как мы видим, используя jhat в value поле Long объекты), за исключением сериализации JSON, поскольку конечная точка REST возвращает значение 20180919141719600, Это сигнализирует о том, что оба значения фактически находятся в памяти (и дамп кучи), и каким-то образом сериализация JSON (с использованием Джексона) делает что-то другое, в соответствии с тем, что jhat делает при выполнении запросов OQL.

Каким будет следующий шаг для анализа этой ситуации?

0 ответов

Другие вопросы по тегам