Мы, похоже, подвержены странной ошибке в нашей среде Java. У нас теперь было два случая одного и того же исключения «не может быть»; в одном случае проблема возникла 42,551 раз в течение 48 минут в процессе работы, а затем самопроизвольно очистилась.Работа над ошибкой JIT Java
Неисправный код запускается с помощью этой линии:
return String.format("%1d%XY%d", source, System.currentTimeMillis(), quoteID);
, где int source = 0
и long quoteID = 44386874
(к примеру).
Исключение:
java.util.UnknownFormatConversionException: Conversion = 'd'
at java.util.Formatter$FormatSpecifier.conversion(Formatter.java:2605)
at java.util.Formatter$FormatSpecifier.<init>(Formatter.java:2633)
at java.util.Formatter.parse(Formatter.java:2479)
at java.util.Formatter.format(Formatter.java:2413)
at java.util.Formatter.format(Formatter.java:2366)
at java.lang.String.format(String.java:2770)
Проверка кода 'd'
никогда не должны поднимать это исключение.
Лучшее объяснение, которое мы придумали, заключается в том, что компилятор JIT генерирует плохой байт-код, но в последующем повторном JIT он пишет хороший код.
У кого-нибудь есть опыт в том, чтобы обойти/диагностировать такую проблему?
Roger.
Жуткий ошибка. Грустные времена. –
Какой JVM? Вы пытались «final» метод, который содержит эту строку, чтобы изменить обработку JIT? – omerkudat
@omer - хорошее предложение. +1 –