¿Hay alguna diferencia de rendimiento entre la depuración de Javac activada y desactivada?

StackOverflow https://stackoverflow.com/questions/218033

Pregunta

Si enciendo la generación de información de depuración con Javac, los archivos de clase son un 20-25% más grandes. ¿Tiene esto algún efecto de rendimiento al ejecutar el programa Java? En caso afirmativo, en qué condiciones y cuántos. Espero un poco de impacto en la carga de las clases porque los archivos son más grandes, pero esto debería ser mínimo.

¿Fue útil?

Solución

En cualquier idioma, la información de depuración es metainformación. Por su naturaleza, aumenta el tamaño de los archivos de objetos, lo que aumenta el tiempo de carga. Durante la ejecución fuera de un depurador, esta información se ignora por completo. Como se describe (aunque no claramente) en la especificación JVM la información de depuración se almacena fuera de la secuencia de bytecode. Esto significa que en el momento de la ejecución no hay diferencia en el archivo de clase. Sin embargo, si quieres estar seguro, pruébalo :-).

Ps. A menudo, para la depuración hay valor en desactivar la optimización. Eso tiene un impacto en el rendimiento.

Otros consejos

Desactivar la depuración solo no debería hacer ninguna diferencia. Pero una vez que desactiva la depuración y activa la optimización, debería ver una diferencia, ya que esto hace algunas optimizaciones estáticas en tiempo de compilación. De esta manera, incluso su código optimizado de zona activa se vuelve más rápido en tiempo de ejecución.

Pero hasta ahora, la compensación entre obtener significados completos de apilamiento o tener algo más de rendimiento de usuario, siempre voté por los rastros de apilamiento. Después de todo, los usuarios están dispuestos a gastar 1000 $ cada año para obtener una máquina más rápida, pero no están dispuestos a gastar 15 minutos para darle mensajes de error significativos para resolver sus problemas.

Después de los años, estoy más dispuesto a valorar mis 15 minutos más que los 1000 $ del usuario. :)

Tenga en cuenta que dado que JDK1.3 javac ignora cualquier indicador de optimización, "la optimización en tiempo de compilación es innecesaria"

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top