usar icon example codigo java performance debugging javac

icon - ¿Hay alguna diferencia de rendimiento entre la depuración de Java y la desactivación?



set icon java (3)

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 en el rendimiento al ejecutar el programa Java? En caso afirmativo, ¿en qué condiciones y cuántas? Espero un pequeño impacto al cargar las clases porque los archivos son más grandes, pero esto debería ser mínimo.


Desactivar la depuración no debería marcar la diferencia. Pero una vez que desactiva la depuración y activa la optimización, debería ver una diferencia, ya que esto genera algunas optimizaciones estáticas en tiempo de compilación. De esta forma, incluso su código optimizado para punto caliente se hace más rápido en tiempo de ejecución.

Pero hasta ahora, la compensación entre obtener el significado completo de la pila de rastros o tener un poco más de rendimiento del usuario, siempre he votado por los restos de la pila. 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. :)


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

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


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