Привет, мне было интересно, как сильно изменяются файлы классов Java в разных компиляторах. Итак, насколько изменится фактический размер байтов, если файлы .java скомпилированы, скажем, Sun JDK 1.4, 1.5 1.6 или даже IBM JDK. Я знаю, что файлы классов могут быть разными в отношении отладочной информации и запутывания, но давайте предположим, что эти параметры одинаковы, поэтому отладочная информация включена, запутывания нет. Если бы я запустил MD5 или SHA-1 в файле .class, который был скомпилирован JDK 1.4, хэш-код был бы другим, если бы я скомпилировал его в JDK 1.5, но с таргетингом на 1.4, что при нацеливании на JDK 1.5?
Также в связи с этим изменяется ли двоичный файл класса, когда используются разные зависимости, или по-другому задается вопрос: может ли двоичный файл файла класса изменяться в зависимости от его зависимостей?
И, наконец, что не менее важно, существуют ли программные способы анализа метаданных файла .class для определения версии компилятора и / или параметров, которые использовались при его компиляции?