2010-01-14 16 views

Respuesta

6

Las envolturas, al ser objetos, se colocan en el montón. Los primitivos son solo "valores" y van en la pila. Esto es más eficiente, porque para las primitivas envueltas en el montón, necesita (al menos) tanto el valor (que está en la pila) como la referencia al objeto contenedor.

Si este aumento del rendimiento importa realmente depende de lo que esté haciendo. Para el trabajo numérico pesado, definitivamente, pero para el 99% de las cosas que hay, esto es más bien una molestia. Por un lado, no puede almacenar primitivos en una colección de todos modos; consiguen autoboxed. Entonces, la única forma de almacenar muchos de ellos es usar arreglos simples, lo que a su vez puede conducir a otros tipos de ineficiencias (por ejemplo, si necesita cambiarles el tamaño).

+0

¿hay alguna otra razón que almacenamiento? – GuruKulki

+0

No estoy 100% seguro de cómo funcionan las partes internas aquí, pero creo que para calcular cualquier cosa con los números, la maquinaria primero tiene que extraer los valores de las envolturas (unboxing), lo que requiere al menos algo de trabajo. Pero la optimización del tiempo de ejecución JIT probablemente está jugando sus propios trucos aquí, por lo que la diferencia puede ser bastante insignificante en la práctica, incluso en programas numéricamente intensivos. Esto debe medirse para estar seguro. –

3

Porque las primitivas son más livianas y más eficientes en términos de memoria y procesamiento de CPU.

+0

Y debemos tener esto en cuenta al trabajar con dispositivos móviles/de mano. –

+0

Pero también considere si tiene un efecto del 10% o del 0.00001% en una situación particular. Solo optimízate si es importante. –

2

Una palabra: rendimiento.

Los tipos de envoltura también son inmutables, lo que hace que sea muy costoso si uno quiere usar uno para un contador de bucles, por ejemplo.

La JVM también tiene códigos de operación para hacer aritmética directamente en primitivas.

Cuestiones relacionadas