2009-06-10 7 views

Respuesta

9

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.

10

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.

+3

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

+0

¿De verdad? Es bueno saber :) –

+0

ú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

15

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.

2

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.

+0

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. –

1

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.

Cuestiones relacionadas