Будет ли Java-приложение тормозить из-за наличия -Xdebug или только при пошаговом выполнении кода? - PullRequest
21 голосов
/ 10 февраля 2010

Я понимаю, что код Java замедляется при запуске в отладчике.

Вопрос в том, замедлится ли код, просто запустив Java с этими параметрами:

Xdebug -Xrunjdwp:transport=dt_socket,address=5005,server=y,suspend=n

??

Или замедление происходит только тогда, когда вы подключаетесь к «порту отладки» и фактически выполняете код, используя IDE?

Ответы [ 3 ]

16 голосов
/ 11 февраля 2010

Во-первых, чтобы строго ответить на ваш вопрос - по крайней мере, как указано в его заголовке - -Xdebug only включает поддержку отладки в VM с использованием 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 для прослушивания для сокетного соединения на заданном порту не должно быть заметного влияния на производительность. Но подключение отладчика делает.

11 голосов
/ 28 января 2015

Результаты тестирования производительности в 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-when-debugging-is-enabled/

0 голосов
/ 11 февраля 2010

Нет, простое включение порта отладки не повлияет на производительность во время выполнения.По крайней мере, я никогда не замечал ничего.

..

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...