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.¿Hay alguna diferencia de rendimiento entre la depuración Javac activada y desactivada?
Respuesta
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.
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. :)
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"
Anotación: http://ant.apache.org/manual/Tasks/javac.html –
- 1. ¿Hay alguna diferencia (de rendimiento) entre Depurar y Liberar?
- 2. ¿Hay alguna diferencia de rendimiento entre myCollection.Where (...). FirstOrDefault() y myCollection.FirstOrDefault (...)
- 3. ¿Hay alguna diferencia entre log4net.Config.BasicConfigurator.Configure() y log4net.Config.XmlConfigurator.Configure()?
- 4. ¿Hay alguna diferencia entre DataTable.Clear y DataTable.Rows.Clear?
- 5. ¿Hay alguna diferencia entre System.Windows.Clipboard y System.Windows.Forms.Clipboard?
- 6. ¿Hay alguna diferencia entre SSLv3 y TLS1.0?
- 7. ¿Hay alguna diferencia entre CPython y Python
- 8. ¿Hay alguna diferencia entre gluLookAt() y glFrustum()?
- 9. ¿Hay alguna diferencia entre MsgBox y MessageBox.Show?
- 10. ¿Hay alguna diferencia entre .NET y ASP.NET
- 11. ¿Hay alguna diferencia entre (local), '.' y localhost?
- 12. ¿Hay alguna diferencia entre: window.localStorage y localStorage?
- 13. ¿Hay alguna diferencia entre UITableViewCellAccessoryDetailDisclosureButton y UITableViewCellAccessoryDisclosureIndicator
- 14. ¿Hay alguna diferencia entre `ListView.invalidateViews()` y 'Adapter.notifyDataSetChanged()'?
- 15. ¿Hay alguna diferencia entre! == y! = En PHP?
- 16. ¿Hay alguna diferencia entre is_int() y ctype_digit()?
- 17. ¿Hay alguna diferencia entre readonly y {get; }
- 18. ¿Hay alguna diferencia de rendimiento entre la serialización binaria y XML?
- 19. ¿Hay alguna diferencia entre "! =" Y "<>" en Oracle Sql?
- 20. ¿Hay alguna diferencia entre/\ s/g y/\ s +/g?
- 21. ¿Hay alguna diferencia de rendimiento entre SQL Server Web y las ediciones Express?
- 22. ¿Hay alguna diferencia de rendimiento entre Begin * y * Async para sockets en .NET?
- 23. ¿Hay alguna diferencia de rendimiento entre mayor que y mayor que o igual?
- 24. Diferencia de rendimiento entre IIf() y Si
- 25. diferencias de rendimiento entre depuración y liberación construye
- 26. ¿Hay alguna diferencia entre RPC e IPC?
- 27. ¿Hay alguna diferencia entre las manchas y los componentes conectados?
- 28. ¿Hay alguna diferencia entre "foo is None" y "foo == None"?
- 29. ¿Hay alguna diferencia entre delegate/selector y target/action?
- 30. Rieles: ¿hay alguna diferencia entre 'references: foo' y 'integer: foo_id'?
¿Se javac aún tienen -O? Lo último que recuerdo es el equivalente de -g: ninguno. –
Correcto. El tiempo de carga se ve afectado pero el tiempo de ejecución no. – kohlerm
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). –