Ответ 1
Вы имеете в виду компиляцию с опцией debug? Есть ли разница в производительности между Javac debug on и off?
Есть ли какая-то причина, по которой я должен избегать компиляции в отладочной информации с Javac в моих классах Java для использования на производственном сервере? Есть ли какие-либо проблемы с быстротой или безопасностью, о которых я должен знать?
Обратите внимание, что я имею в виду отладочную информацию, такую как номера строк в трассировке стека, а не уровень отладки регистраторов.
Вы имеете в виду компиляцию с опцией debug? Есть ли разница в производительности между Javac debug on и off?
Говоря как разработчик, я бы порекомендовал оставить так много, как вам может быть неприятно. Обоснование?
В один прекрасный день вы столкнетесь с ошибкой в своей программе, где ТОЛЬКО часть информации, которую вы имеете, представляет собой трассировку стека, и ошибка не может быть воспроизведена по команде, это было совершенно неожиданно для первоначальных программистов, и это ВАША работа Исправить это. Чем больше информации, доступной вам в этой трассе, тем лучше! Оставьте всю информацию об отладке!
Если вы можете, используйте фреймворк регистрации (чтобы получить трассировку стека в файл), который может предоставить информацию о jar файле, в котором был найден каждый класс. Logback может это сделать, и я считаю, что log4j тоже может.
Вам не разрешается включать всю эту информацию, но я считаю, что вам следует сначала кричать и кричать и говорить, что ее следует оставить на случай непредвиденных обстоятельств.
Я считаю, что с HotSpot это не имеет значения.
Если вы имеете в виду информацию о номере линии, для печати трассировки стека, то обычно это хорошая идея. Клиент может вставлять трассировку стека в отчет об ошибке, с которым вы можете работать.
Если вы действительно обеспокоены тем, что имена ваших методов становятся видимыми, вы можете использовать ProGuard или какой-либо другой объект-обфускатор. ProGuard обладает отличным свойством, что он может де-обфускать трассировки стека, поэтому клиенты все равно могут отправить их вам.
Обфускация не идеальна, поэтому, если вы не хотите тратить силы, нет ничего плохого в том, чтобы не делать этого.
В зависимости от избыточности отладки и производительности вашей программы. 90% мира с умеренной отладкой не должны беспокоиться.
Вы всегда можете использовать препроцессор для исключения кода.
Я согласен с BalusC в том, что loglevels в производстве обычно могут быть установлены выше (меньше выходных) в производстве, чем в тесте. Я думаю, что полное удаление журналов будет контрпродуктивным. Даже при ошибках производственного кода, и вам нужна информация о регистрации, чтобы узнать, что произошло.
Заявления о утверждении также не являются большой проблемой, если, конечно, не очень чувствительная к производительности часть кода. Вы должны быть в состоянии полностью исключить их, поскольку утверждения, как правило, проверяют вещи, которые не могут произойти (если они используются правильно). Но преодоление проблемы, как бы то ни было, вытащить их не нужно.
Я лично считаю, что программное обеспечение, установленное на производстве, должно быть как можно ближе к программному обеспечению разработки, поскольку это было протестировано чаще всего.