macbook - Java VM de 64 bits ejecuta la aplicación 10 veces más despacio
java installation (2)
64 bit no es más lento. Tratar:
public class Benchmark {
public static void main(String args[]) {
long time = System.currentTimeMillis();
for (int a = 1; a < 900000000; a++) {
for (int b = 1; b < 20; b++) {
}
}
long time2 = System.currentTimeMillis() - time;
System.out.println("/nTime counter stopped: " + time2);
}
en 32 y 64 y dinos qué resultados obtienes
Tengo una aplicación Java que está empaquetada usando JarBundler. La aplicación consume bastante CPU (muchas llamadas grandes Collection.sort ()).
En Mac OS, la aplicación se ejecuta lenta y lentamente cuando se utiliza JavaApplicationStub de 64 bits. Este archivo JavaApplicationStub está lanzando la máquina virtual de Java de 64 bits.
Encontré un viejo archivo JavaApplicationStub que solo es de 32 bits. Lo reemplacé en el paquete, ¡y la aplicación funciona 10 veces más rápido! (en consecuencia, la máquina virtual de 32 bits se utiliza cuando se ejecuta la aplicación).
¿Tiene esto algún sentido? ¿Por qué la VM de 64 bits es mucho más lenta? ¿Tiene sentido construir una aplicación y hackear el archivo JavaApplicationStub de esta manera?
Aconsejar es apreciado.
Consulte esta publicación sobre los beneficios / desventajas de ejecutar una JVM de 64 bits. En resumen, la eliminación de referencias y la desasignación de memoria puede llevar más tiempo, y se está moviendo alrededor de estructuras de datos más grandes (es decir, 64, no 32 bits, lo que no le beneficia a menos que usted haga uso explícito de ellas).
Consulte también este artículo relevante , donde se analiza la disminución en el rendimiento de hasta el 85% cuando se mueve a 64 bits, que está en línea con lo que está experimentando:
La razón de esta disminución en el rendimiento está en realidad muy relacionada con el aumento en la memoria. Las referencias de memoria bajo las cubiertas de Java se han duplicado, lo que aumenta el tamaño de las estructuras de memoria en el tiempo de ejecución de WAS y los objetos de su aplicación. Lamentablemente, los tamaños de la memoria caché de la memoria del procesador no aumentaron al mismo tiempo. Esto significa que se pierde más memoria caché, lo que significa un trabajo más ocupado para el hardware que trata con la memoria más grande, lo que significa un peor rendimiento de la aplicación.