Есть ли разница в производительности между Javac debug on и off?

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

Ответы

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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