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