Spring e Hibernate utiliza reflexión para la creación de bean (en caso de primavera) y mapeo POJO (en caso de Hibernate). ¿Tiene un impacto negativo en el rendimiento? Porque la reflexión es más lenta en comparación con la creación directa de objetos.Sobrecarga de rendimiento para hibernación y primavera debido a la reflexión
Respuesta
Si bien hay una penalización de rendimiento, es relativamente baja y puede considerarse insignificante.La cuestión clave aquí es que el beneficio que obtiene del uso de un ORM (con reflejo) supera con creces la multa por rendimiento muy pequeña que paga.
Recuerde que al observar el rendimiento, diseñe el sistema de la manera que desee y preocúpese por el rendimiento cuando se convierta en un problema.
Salida Hibernate Q&A section in FAQ, es casi todo acerca de instancias emite
En las últimas versiones de Hibernate, "reflejo" se optimiza a través de la biblioteca de tiempo de ejecución de código de bytes generación CGLIB . Esto significa que propiedades "reflejadas" llamadas get/set ya no llevan la sobrecarga de la API de reflexión Java y en realidad son llamadas a métodos normales. Esto da como resultado en una ganancia de rendimiento (muy) pequeña.
Sí, probablemente sí. Hibernate está bastante optimizado en varias formas astutas, pero aún será más lento que el acceso a datos de bajo nivel con exactamente la declaración preparada correcta, suponiendo que la caché no lo ayude.
Pero esa no es la pregunta que debe formular de todos modos.
Necesita preguntar si afecta el rendimiento significativamente - en cuyo punto sospecho que encontrará que la respuesta es "no". En términos de Hibernate, es probable que el acceso a la base de datos subyacente sea un lote más lento que la sobrecarga debida a Hibernate. En términos de primavera, la creación de frijoles a menudo solo ocurre al comienzo del programa, una sola vez.
Como siempre, si tiene dudas, el punto de referencia y el perfil son un escenario realista.
Las posibilidades de que la sobrecarga de reflexión sea significativa son remotas, en cualquier aplicación razonable. (siempre hay aplicaciones irrazonables :)
Para una comparación; ejecute su aplicación a través de un perfil y observe la cantidad de memoria/CPU consumida por el controlador JDBC.
Lo importante de la hibernación y la primavera es que están diseñados para optimizar su rendimiento y hacerlo más productivo y su código más confiable.
ACTUALIZACIÓN: Creo que el punto que yo y el señor Skeet están tratando de hacer es que el impacto en el rendimiento del uso de la reflexión en estos marcos es menor. Eso combinado con el hecho de que la reflexión es una parte vital de la implementación de estos marcos significa que hay pocas opciones.
Estoy totalmente de acuerdo con su comentario de que la primavera e hibernación se desarrollan para hacer que el desarrollador sea más productivo. Pero solo quiero saber la parte de la reflexión en términos de rendimiento alcanzado en el caso de ambos el marco. –
Solo puede averiguar si está midiendo para su carga de trabajo específica.
Supongamos que para recuperar + hidratar 100 entidades Spring + Hibernate agregará una sobrecarga de 3 milisegundos.
Si su unidad de trabajo generalmente demora 120 milisegundos, entonces hay una sobrecarga muy pequeña. Si toma 5 milisegundos, entonces es serio.
- 1. de alojamiento web para la primavera y de hibernación aplicación
- 2. Plantilla de hibernación de primavera ¿cuándo y por qué?
- 3. Sobrecarga de rendimiento AOP
- 4. Rendimiento de C# que varía debido a la memoria
- 5. Problemas de rendimiento de arranque de primavera
- 6. Eliminando nullptr - ¿Sobrecarga de rendimiento?
- 7. inserto de hibernación de alto rendimiento
- 8. ¿Cómo integrar la primavera con la sesión de hibernación y la gestión de transacciones?
- 9. Rendimiento de reflexión - Crear delegado (Propiedades C#)
- 10. Problema habitual de rendimiento de hibernación
- 11. asp.net MVC y $ .ajax sobrecarga de rendimiento agregado
- 12. cómo medir el rendimiento de hibernación?
- 13. primavera y de hibernación: No hay resultados para hilo actual Sesión
- 14. Asignación a varchar y nvarchar en hibernación
- 15. sobrecarga y sobrecarga de Java
- 16. PHP 5 Reflexión de rendimiento API
- 17. Problema de rendimiento de WPF debido a la automatización de la interfaz de usuario
- 18. primavera lista de plantillas de hibernación como parámetro
- 19. ¿Cómo crear clases .NET de alto rendimiento utilizando la reflexión?
- 20. Alternativas a la seguridad de primavera en Java (primavera)
- 21. La sobrecarga de rendimiento de instanciar múltiples clases de Mootools
- 22. ¿La activación del agente JMX tiene una sobrecarga de rendimiento?
- 23. Mal rendimiento de la consulta SQL debido a la cláusula ORDER BY
- 24. ¿Varchar da como resultado un golpe de rendimiento debido a la fragmentación de datos?
- 25. GtkTreeView penalización de rendimiento de inserción/actualización debido a la clasificación
- 26. Con respecto a la transacción de hibernación y vaciado
- 27. Cómo usar la reflexión para crear una "máquina de reflexión"
- 28. Mejorando la reflexión del rendimiento, qué alternativas debería considerar
- 29. primavera @Transactional fusionar y persistir pregunta
- 30. Sobrecarga de rendimiento de las bibliotecas de JavaScript
Solo para el registro, estas preguntas frecuentes ya no están actualizadas. CGLIB ya no es el proveedor de reflejos predeterminado para Hibernate: a partir de Hibernate 3.3, Javassist ha reemplazado a CGLIB como proveedor predeterminado. – Cowan
¿De verdad? Es bueno saber :) –
última versión: [Preguntas frecuentes sobre Hibernate - Preguntas y respuestas de rendimiento] (https://developer.jboss.org/wiki/HibernateFAQ-PerformanceQA#jive_content_id_But_Hibernate_uses_so_much_runtime_reflection) – yukihane