Есть ли разница в производительности между включенной и выключенной отладкой Javac? - PullRequest
60 голосов
/ 20 октября 2008

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

Ответы [ 3 ]

61 голосов
/ 20 октября 2008

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

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

14 голосов
/ 22 октября 2008

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

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

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

7 голосов
/ 25 января 2009

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

...