2011-02-08 16 views
9

Recientemente me mudé a un sistema operativo de 64 bits en Windows Server 2008 Enterprise.Java performance 64 bit

Parece que mis programas Java se ejecutan significativamente más lento que el de 32 bits en Windows 2003.

Realmente cualquier reacción.

Es éste un problema conocido? ¿Hay configuraciones específicas para mejorar el rendimiento?

(Soy consciente de que hay una pequeña penalización de rendimiento para pasar a 64 bits pero estoy viendo un golpe de rendimiento significativo).

Respuesta

7

Con JVM de 64 bits, puede ver un rendimiento diferente, sin embargo, verá mucha más diferencia al usar un sistema operativo diferente en una máquina diferente.

Si desea ver si el uso de referencias de 64 bits está ralentizándolo, puede habilitar -XX:+UseCompressedOops, lo que hace que la JVM de 64 bits utilice referencias de 32 bits pero aún puede acceder a 32 Gb de memoria.

Otra forma de probar esto es utilizar una JVM de 32 bits en su sistema. ;)

Tenemos un sistema sensible a la latencia y vemos poca ventaja de rendimiento en el uso de referencias de 32 bits en una JVM de 64 bits, ya que desplaza cada dirección en 3 bits. El conjunto de registros más pequeños de JVM de 32 bits nos lastima más de lo que ayuda.

EDIT: Para más detalles

http://wikis.sun.com/display/HotSpotInternals/CompressedOops

http://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html

http://blog.juma.me.uk/2008/10/14/32-bit-or-64-bit-jvm-how-about-a-hybrid/

+0

¿Cómo utiliza la JVM de 64 bits referencias de 32 bits pero aún puede acceder a 32 Gb de memoria? – Pacerier

+0

Utiliza un índice de 32 bits, sabiendo que cada objeto comenzará en un límite de 8 bytes (alineación de 8 bytes). Por lo tanto, puede tratar hasta 2^32 * 8 bytes o 32 GB. –

+0

ic, gracias por la ayuda =) – Pacerier

3

Sí lo es, échele un vistazo al Hotspot FAQ.

Los punteros de 8 bytes aumentan el código y el tamaño de los datos y ralentizan todo. Si busca rendimiento y no necesita un gran montón, pruebe una máquina virtual Java de 32 bits.

+0

+1: Interesante, yo no sabía que el uso de una JVM de 64 bits significa que siempre estaba utilizando la servidor VM. – Powerlord

+0

Sí, lo sé, pero no estoy hablando de una pequeña pérdida sino de una desaceleración significativa. – Dan

+0

Anteriormente, Sun hacía que la JVM de Solairs/Linux utiliza '-server' de manera predeterminada y Windows usa' -client' de manera predeterminada. (Tal vez una parcialidad en cuanto a lo que pensaban que era bueno para ellos;) Con 64 bits, todas sus versiones usan '-server' por defecto. –