Есть ли разница в производительности между включенной и выключенной отладкой Javac?

StackOverflow https://stackoverflow.com/questions/218033

Вопрос

Если я включу генерацию отладочной информации с помощью Javac, то файлы классов станут на 20-25% больше.Влияет ли это как-нибудь на производительность при запуске Java-программы?Если да, то на каких условиях и в каком количестве.Я ожидаю небольшого влияния на загрузку классов, потому что файлы больше, но это должно быть минимальным.

Это было полезно?

Решение

На любом языке отладочная информация - это метаинформация.Это по своей природе увеличивает размер объектных файлов, тем самым увеличивая время загрузки.Во время выполнения вне отладчика эта информация фактически полностью игнорируется.Как указано (хотя и не совсем четко) в Спецификация JVM отладочная информация хранится вне потока байт-кода.Это означает, что во время выполнения в файле класса нет никакой разницы.Но если вы хотите быть уверены, попробуйте :-).

Ps.Часто для отладки имеет смысл отключить оптимизацию.Это делает оказывают влияние на производительность.

Другие советы

Отключение только отладки не должно иметь никакого значения. Но как только вы отключите отладку и включите оптимизацию, вы увидите разницу, так как это приводит к некоторой статической оптимизации во время компиляции. Таким образом, даже ваш оптимизированный для хот-спота код становится быстрее во время выполнения.

Но пока что между компромиссом между получением значения полных трассировок стека или повышением производительности пользователя я всегда голосовал за трассировки стека. В конце концов, пользователи готовы тратить 1000 долларов в год на приобретение более быстрой машины, но не хотят тратить 15 минут на то, чтобы дать вам значимые сообщения об ошибках для решения своих проблем.

По прошествии многих лет я более склонен оценивать свои 15 минут выше, чем 1000 $ пользователя. :)

Имейте в виду, что поскольку JDK1.3 javac игнорирует все флаги оптимизации, "оптимизация во время компиляции не нужна"

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top