2008-10-20 7 views

Respuesta

56

En cualquier idioma, la información de depuración es meta informació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 JVM spec, 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 :-).

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

+0

¿Se javac aún tienen -O? Lo último que recuerdo es el equivalente de -g: ninguno. –

+2

Correcto. El tiempo de carga se ve afectado pero el tiempo de ejecución no. – kohlerm

+0

De hecho, el compilador de Sun Java no tiene un indicador de optimización. La optimización ocurre principalmente en el tiempo de ejecución del punto de acceso. La optimización en tiempo de compilación en realidad puede obstaculizar la capacidad de las zonas activas para optimizar (utilizando información completa solo disponible en tiempo de compilación). –

14

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 significados lleno de rastros de pila 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. :)

5

Tenga en cuenta que, dado que ignora cualquier jdk1.3 javac parámetros de optimización, "en tiempo de compilación optimización es innecesario"

+0

Anotación: http://ant.apache.org/manual/Tasks/javac.html –

Cuestiones relacionadas