Известны проблемы совместимости с скомпилированным кодом JDK7 с использованием инструментария. Что касается http://www.oracle.com/technetwork/java/javase/compatibility-417013.html
Classfiles с номером версии 51 проверяются исключительно с помощью верификатора проверки типов, и, следовательно, при необходимости методы должны иметь атрибуты StackMapTable. Для файлов классов с версией 50 JVM Hotspot будет (и продолжает) отказоустойчивость к верификатору ввода-вывода, если файлы стека в файле отсутствуют или неверны. Такое поведение при отказе не возникает для файлов классов с версией 51 (версия по умолчанию для Java SE 7). Любой инструмент, который модифицирует байт-код в файле класса версии 51, обязательно должен обновить информацию о стеке, чтобы она соответствовала байт-коду, чтобы пройти проверку.
Решение состоит в том, чтобы использовать -XX:-UseSplitVerifier
, как описано здесь:
http://weblogs.java.net/blog/fabriziogiudici/archive/2012/05/07/understanding-subtle-new-behaviours-jdk-7
Насколько это безопасно? Я полагаю, что Oracle поместила эту проверку по какой-то причине. Если я его не использую, я могу рискнуть и на другие проблемы.
Каковы могут быть последствия использования -XX:-UseSplitVerifier
?
Спасибо,
Петр.