Подтвердить что ты не робот

Почему некоторые java-библиотеки скомпилированы без отладки информации

Недавно я заметил, что есть несколько java-библиотек (JDK, joda time, iText), которые компилируются без какой-либо/всей отладочной информации. Отсутствует либо информация о локальной переменной, либо отсутствуют данные локальной переменной и номера строк.

Есть ли причина для этого? Я понимаю, что он делает скомпилированный код более крупным, но я не считаю, что это особое соображение. Или это просто построение с параметрами компиляции по умолчанию?

Спасибо.

4b9b3361

Ответ 1

Параметры компиляции по умолчанию не включают в себя информацию об отладке, вы должны сказать, что компилятор должен ее включить. Есть несколько причин, почему большинство людей опускают это:

  • Некоторые библиотеки используются во встроенных системах (например, мобильных телефонах). До недавнего времени каждый бит подсчитывался. Сегодня большинство мобильных телефонов имеют больше памяти, чем все компьютеры в 1985 году вместе;)
  • При компиляции с активной отладкой код работает на 5% медленнее. Не много, но опять же, в некоторых случаях каждый цикл считается.
  • Сегодня старшие разработчики родились в то время, когда 64 КБ ОЗУ были огромны. Вчера я добавил еще 2TB диск на мой сервер в подвале. Это на 7 порядков в 25 лет. Людям нужно больше времени для настройки.

[EDIT] Как отметил Джон, байт-код Java сегодня не оптимизирован (много). Таким образом, вывод файлов классов будет одинаковым для обоих случаев (только файл класса с информацией об отладке будет больше). Код оптимизирован в JIT во время выполнения, что позволяет среде выполнения оптимизировать код для процессора, памяти (количество и макет) и т.д.

Указанный штраф в размере 5% - это когда вы запускаете код и добавляете параметры командной строки, чтобы позволить удаленному отладчику присоединяться к процессу. Если вы не включаете удаленную отладку, нет штрафа (кроме загрузки класса, но это происходит только один раз).

Ответ 2

Вероятно, размер установки. Отладочная информация добавляет служебные данные в jar файлы, которые Sun, вероятно, не понравилось.

Мне пришлось сначала исследовать проблему Java Web Start - нет информации об отладке, поэтому добавление полной трассировки в консоль java и загрузку исходного кода помогло некоторым, но код довольно запутан, поэтому мне просто хотелось бы создать отладочную сборку.

JDK должен быть скомпилирован с ПОЛНОЙ отладочной информацией везде!