Есть ли разница в производительности между включенной и выключенной отладкой Javac?
-
03-07-2019 - |
Вопрос
Если я включу генерацию отладочной информации с помощью Javac, то файлы классов станут на 20-25% больше.Влияет ли это как-нибудь на производительность при запуске Java-программы?Если да, то на каких условиях и в каком количестве.Я ожидаю небольшого влияния на загрузку классов, потому что файлы больше, но это должно быть минимальным.
Решение
На любом языке отладочная информация - это метаинформация.Это по своей природе увеличивает размер объектных файлов, тем самым увеличивая время загрузки.Во время выполнения вне отладчика эта информация фактически полностью игнорируется.Как указано (хотя и не совсем четко) в Спецификация JVM отладочная информация хранится вне потока байт-кода.Это означает, что во время выполнения в файле класса нет никакой разницы.Но если вы хотите быть уверены, попробуйте :-).
Ps.Часто для отладки имеет смысл отключить оптимизацию.Это делает оказывают влияние на производительность.
Другие советы
Отключение только отладки не должно иметь никакого значения. Но как только вы отключите отладку и включите оптимизацию, вы увидите разницу, так как это приводит к некоторой статической оптимизации во время компиляции. Таким образом, даже ваш оптимизированный для хот-спота код становится быстрее во время выполнения.
Но пока что между компромиссом между получением значения полных трассировок стека или повышением производительности пользователя я всегда голосовал за трассировки стека. В конце концов, пользователи готовы тратить 1000 долларов в год на приобретение более быстрой машины, но не хотят тратить 15 минут на то, чтобы дать вам значимые сообщения об ошибках для решения своих проблем. Р>
По прошествии многих лет я более склонен оценивать свои 15 минут выше, чем 1000 $ пользователя. :) Р>
Имейте в виду, что поскольку JDK1.3 javac игнорирует все флаги оптимизации, "оптимизация во время компиляции не нужна"