Будет ли Java-приложение замедляться присутствием -Xdebug или только при переходе через код?
Я понимаю, что код Java будет замедлить при запуске в отладчике.
Вопрос в том, будет ли код замедляться, просто запустив Java с этими параметрами:
Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n
??
Или происходит ли замедление только при подключении к "порту отладки" и фактическому прохождению кода с помощью среды IDE?
Ответы
Ответ 1
Во-первых, чтобы строго ответить на ваш вопрос - по крайней мере, как указано в его заголовке - -Xdebug
включает поддержку отладки только в виртуальной машине с использованием JVMDI в JVM до 5.0. Так что само по себе это мало что дает. Более того, JVMDI устарела с 5.0 в пользу JVMTI:
- Xdebug
Начните с поддержкой JVMDI. JVMDI устарел и не используется для отладки в J2SE 5.0, поэтому этот параметр не требуется для отладки в J2SE 5.0.
Так что -Xdebug больше ничего не делает, и важная часть:
-Xrunjdwp:<name1>[=<value1>],<name2>[=<value2>]...
или, начиная с Java 5.0, более новый (который вы предпочитаете, поскольку агент JDWP в 5.0 использует интерфейс TI JVM с виртуальной машиной, а не более старый интерфейс JVMDI):
--agentlib:jdwp=<name1>[=<value1>],<name2>[=<value2>]...
Теперь, насколько мне известно, простая загрузка агента jwdp и/или настройка JVM для прослушивания соединения с сокетом на заданном порту не оказывает заметного влияния на производительность. Но подключение отладчика делает.
Ответ 2
Результаты тестирования производительности в AMD показывают, что простое включение агента отладки через командную строку JVM приводит к снижению производительности независимо от того, подключен ли к нему отладчик, и что снижение может быть довольно большим в зависимости от рабочей нагрузки:
Обратите внимание, что мы фактически не подключали отладчик, когда измеряли производительность, поэтому мы предполагали, что эта опция agentlib будет не зависеть от производительности в этом сценарии использования. Когда мы удалили эту опцию, загрузка ЦП и производительность этой рабочей нагрузки (измеряемой в запросах в секунду) значительно улучшились.
Смотрите их отчет:
http://developer.amd.com/resources/documentation-articles/articles-whitepapers/java-performance-when-debugging-is-enabled/
Выше ссылка не работает, вот ссылка на ее веб-архив: https://web.archive.org/web/20160316201129/http://developer.amd.com/resources/documentation-articles/articles-whitepapers/java-performance -когда-отладка-это-включен/
Ответ 3
Нет, просто включение отладочного порта не повлияет на производительность выполнения. По крайней мере, я никогда не замечал.
..