Ни один крупный Java-компилятор не выполняет каких-либо оптимизаций (за исключением некоторого свертывания константных значений).Обычно это зарезервировано для выполнения JVM во время выполнения.
Чтобы узнать, был ли создан .class
с отладочной информацией или без нее, запустите на нем javap
с помощью флага -v
и найдитеLineNumberTable
атрибут.Они должны выглядеть примерно так:
LineNumberTable:
line 7: 0
line 8: 8
Если класс был скомпилирован с полной информацией отладки (включая локальные переменные), то он также содержит LocalVariableTable
, например:
LocalVariableTable:
Start Length Slot Name Signature
0 9 0 argc [Ljava/lang/String;
Один флаг компилятора, который фактически влияет на вывод, - -encoding
, чтобы указать кодировку входного исходного файла.Поскольку строковые литералы в файлах .class
всегда используют UTF-8, нет способа обнаружить исходную кодировку исходных файлов из файла .class
.