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


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

3 57

3 ответа:

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

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

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

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

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

обратите внимание, что поскольку jdk1. 3 javac игнорирует любые флаги оптимизации, "оптимизация времени компиляции не нужна"