java: может ли jdwp снизить производительность?

Как известно, после jdk 5 не нужно указывать -Xdebug для отладки, вместо этого используйте -agentlib:jdwp, но значит ли это, что режим отладки пропал? И означает ли это, что java-программа будет работать в обычном режиме без какого-либо компромисса в производительности, в то время как вы все равно можете подключить ее в любое время, когда захотите ее отладить?

По сравнению с C/C++, вы можете отлаживать приложение, скомпилированное в оптимизированном режиме, если вы не удаляете символы отладки, хотя в оптимизированном режиме отладка не так точна, например, из-за некоторые функции встроены или удалены. Итак, кстати, есть ли в java концепция отладочных символов/информации, когда вам нужно позаботиться о создании приложения?


person kingluo    schedule 04.07.2018    source источник


Ответы (1)


Как известно, после jdk 5 не нужно указывать -Xdebug для отладки, вместо этого используйте -agentlib:jdwp, но означает ли это, что режим отладки исчез?

Да. Режим отладки старой школы исчез. (Опция -Xdebug игнорируется современными JVM.)

И означает ли это, что java-программа будет работать в обычном режиме без какого-либо компромисса в производительности, в то время как вы все равно можете подключить ее в любое время, когда захотите ее отладить?

См. Накладные расходы на включение *возможности* JVMTI для запроса локальных переменных например.

Существует некоторый компромисс в производительности1, но меньше, чем при использовании -Xdebug. Агент JVMTI подавляет некоторые оптимизации JIT-компилятора, но не все.

Есть ли в java концепция отладочных символов/информации, когда вам нужно позаботиться о создании приложения?

Да, это так. См. вариант -g для javac.


1. В большинстве источников говорится, что стоимость невелика или незначительна, но я видел комментарий, в котором говорилось о 10-кратном снижении производительности. Непонятно, была ли это стоимость -agentlib:jdwp... или что комментатор делал с агентом. Например, если вы включаете трассировку входа/выхода, затраты на производительность значительны. К сожалению, это все анекдотично...

person Stephen C    schedule 04.07.2018
comment
что произойдет, если отладочная информация не скомпилирована? И кажется, что отладочная информация может быть сгенерирована в отдельных файлах? - person kingluo; 04.07.2018
comment
1) Тогда вы не получите номера строк в трассировке стека, а символический отладчик даст вам меньше информации и т. д. 2) AFAIK не в Java. Информация об отладке является частью файла .class. - person Stephen C; 04.07.2018
comment
В качестве дополнительного вопроса, по вашему мнению, какой наиболее рекомендуемый инструмент (автономный, а не специфичный для ide) для отладки Java-программы (современной версии, например jdk 8 или более поздней версии)? Независимо от того, бесплатное или коммерческое. - person kingluo; 04.07.2018
comment
Запросы рекомендаций не по теме. - person Stephen C; 04.07.2018