Pregunta

Actualmente estamos haciendo algunas iteraciones y otras operaciones usando x++; dónde x es un Integer y no un int.

Las operaciones pueden repetirse a lo largo de algunas operaciones de usuario en nuestro sistema, pero nada demasiado complejo o numeroso como una aplicación matemática, un máximo de hasta 10000 veces por transacción de usuario.

¿Este unboxing y posterior boxeo afectarán nuestro desempeño de alguna manera notable? milisegundos?

¿Fue útil?

Solución

http://download.oracle.com/javase/1.5.0/docs/guide/language/autoboxing.html

"Es probable que el rendimiento de la lista resultante sea deficiente, ya que se encuadra o se desempaqueta en cada operación de obtención o configuración.Es lo suficientemente rápido para un uso ocasional, pero sería una locura usarlo en un bucle interno crítico para el rendimiento.

Entonces, ¿cuándo debería utilizar autoboxing y unboxing?Utilícelos sólo cuando haya una "desigualdad de impedancia" entre los tipos de referencia y las primitivas, por ejemplo, cuando tenga que poner valores numéricos en una colección.No es apropiado utilizar autoboxing y unboxing para computación científica u otro código numérico sensible al rendimiento.Un número entero no sustituye a un int;autoboxing y unboxing desdibujan la distinción entre tipos primitivos y tipos de referencia, pero no la eliminan."

Otros consejos

Sí, hay un impacto en el rendimiento.El código equivalente producido para ++x Implica crear un nuevo objeto Integer cada vez. x++ Además, crea una variable temporal para almacenar la referencia entera anterior y algunas manipulaciones.Puede verificar esto desensamblando el archivo de clase.

La velocidad del boxeo automático depende de la versión de JVM que esté utilizando, el rango de números reales con los que esté trabajando y la configuración de su GC.Ver este Artículo realmente interesante y detallado sobre el rendimiento del (des)boxeo.

Básicamente, la JVM almacena en caché varios objetos Integer, por lo que no necesita crear los "comunes" cada vez.Puede configurar este tamaño de caché.

En cuanto a la pregunta específica:¿Su operación será milisegundos ¿Más lento si usas primitivos versus autoboxing?Esto depende completamente del tamaño de la lista y de la frecuencia con la que se llama.Debería ser fácil (¡creo!) probar el rendimiento de la alternativa primitiva.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top