debugging - puedo - Efectos secundarios de ejecutar la JVM en modo de depuración
modo depuracion usb android bloqueado (4)
Me gustaría lanzar una aplicación Java en modo de depuración para permitir una depuración más fácil cuando ocurren problemas aleatorios o difíciles de reproducir en el lado del cliente.
Sin embargo, ¿quiero informarme sobre los posibles efectos secundarios de hacer esto? De la documentación de Java HotSpot parece que no debería haber ninguna penalización de rendimiento .
Desde el enlace
Depuración de velocidad completa
La Java HotSpot VM ahora usa la depuración a toda velocidad. En la versión anterior de la máquina virtual, cuando la depuración estaba habilitada, el programa se ejecutaba usando solo el intérprete. Ahora, la ventaja de rendimiento total de la tecnología HotSpot está disponible para los programas, incluso con código compilado. El rendimiento mejorado permite que los programas de larga duración se puedan depurar más fácilmente. También permite que las pruebas se realicen a toda velocidad. Una vez que hay una excepción, el depurador se inicia con total visibilidad de las fuentes de código.
¿Es correcto o hay advertencias ocultas? ¿Qué pasa con la huella de la memoria y hay otros errores ocultos al usar el modo de depuración?
PD: Encontré este artículo de AMD que confirmó mi sospecha inicial de que el artículo original de oricale no muestra la historia completa.
El programa definitivamente hace mucho más que simplemente ejecutarse cuando está en modo de depuración, por lo que es obvio que el rendimiento no puede ser el mismo. Sin embargo, si lees la declaración cuidadosamente, dice que la nueva versión puede ejecutar código totalmente optimizado, incluso si en el modo de depuración no era posible anteriormente. Por lo tanto, el nuevo jvm es mucho más rápido que el anterior, que solo podía ejecutarse en modo interpretado sin optimización.
Esta pregunta es antigua, pero surgió mientras buscaba algún impacto en el rendimiento si simplemente dejas activada -agentlib: jdwp ... pero no estás realizando una depuración activa.
Resumen: Comenzar con las opciones de depuración pero no conectarse no debería afectar la velocidad ahora (Java 7+).
tl / dr:
Antes de java 6 (ish) usaste -Xdebug y esto tuvo un impacto definitivo, ¡apagó el JIT!
En Java 6 lo cambiaron a -agentlib y lo mejoraron. hubo algunos errores que causaron una penalización de rendimiento. Aquí está uno de los errores que se presentaron en contra de openjdk. Mi conjetura es que hubo problemas similares con la versión de oracle / sun: https://bugs.openjdk.java.net/browse/JDK-6902182
Sin embargo, tenga en cuenta que el objetivo establecido es que simplemente habilitar la depuración abriendo el puerto no debería causar ninguna penalización de rendimiento.
Parece que, al menos en openjdk, los errores fueron solucionados por Java 7. No vi nada sobre los impactos en el rendimiento después de eso.
Si investiga más a fondo y encuentra resultados negativos, tome nota de la versión Java en la que se realizaron las pruebas: todo lo que vi se refería a las versiones anteriores a la 7.
Me encantaría saber si alguien tuvo problemas de rendimiento en una máquina virtual reciente que acaba de dejar el puerto habilitado.
No puedo hablar por HotSpot, y no lo haré oficialmente por IBM, pero diré que ciertamente existen tipos legales de optimización que no se pueden deshacer completamente si se requiere una descompilación en medio de ellos, y por lo tanto no son t habilitado cuando se solicita la depuración en las JVM de producción que es probable que utilice.
Imagine una situación en la que el optimizador descubra que una parte del programa probablemente no es necesaria y, por las distintas reglas de idioma (incluida la JSR 133) es legal eliminarla, la JVM querrá deshacerse de ella. La única opción es la depuración: eliminar el código parecerá extraño para el humano que lo atraviesa (las variables no se actualizan, posiblemente no se detengan en las líneas al avanzar), por lo que la opción es desactivar dichas optimizaciones en esos casos. Lo mismo podría ser cierto para opciones como los objetos asignados a la pila, etc., así que mientras JVM dice que es "a toda velocidad" en realidad está más cerca de "casi toda la velocidad, con algunas de las opciones más extrañas que no se pueden deshacer". .
Si planea ejecutar la aplicación con la depuración remota habilitada, también puede afectar la seguridad. La depuración remota deja un puerto abierto en su máquina y, al conectarme a él, puedo hacer todo tipo de cosas divertidas con su aplicación.