2010-08-10 19 views
5

Algunas preguntas :):Programación Java para JVM de 64 bits

¿Cómo identificar qué JVM está actualmente instalado? (64 bits/32 bits)

¿Es necesario hacer algunas consideraciones durante la programación para la plataforma de destino JVM de 64 bits?

Puede mi código Java a trabajar en 32 bits, así como de 64 bits JVM?

¿Cómo ejecutar mi aplicación Java en JVM de 64 bits?

Cómo identificar lo que JVM se está utilizando para mi aplicación Java?

+1

¿No es el objetivo de una máquina * virtual * que la arquitectura en la que se implementa no importe? – Ken

+2

No si necesita que las bibliotecas SWT se puedan ejecutar. –

Respuesta

10

Normalmente, un jvm de 64 bits se identificará como tal.

32/64 Consideraciones bits que he visto: el espacio

  1. - si usted no está esperando para hacer frente a más de 1,3 GB de memoria, entonces no va a ver una diferencia
  2. bibliotecas nativas - si está cargando cualquier lib de JNI, entonces deberán coincidir con su arquitectura de VM. Por ejemplo, no intente cargar bibliotecas nativas de 32 bits desde un vm de 64 bits (sin el tipo de banderas -d32)

Sí, el mismo código se ejecutará en ambas JVM.

"sun.arch.data.model" sistema de propiedad tiene la bandera 32/64 creo.

Hay algo de información útil aquí: http://www.oracle.com/technetwork/java/hotspotfaq-138619.html

+1

Tenga en cuenta que sun.arch.data.model no es estándar, por lo que las implementaciones de JVM que no son de sol podrían no proporcionar esa propiedad del sistema. La propiedad del sistema os.arch es una propiedad estándar del sistema, pero es posible que deba analizarla. Verificando si os.arch contiene los caracteres '64' podría funcionar. –

+0

@jowierun "Normalmente, un jvm de 64 bits se identificará como tal". Pero cuando ejecuto lo mismo en Solaris (donde están instalados tanto 32 bits como 64 VM), siempre toma VM de 32 bits. – YoK

+1

@Sean Reilly pero en la máquina Sparc de 64 bit puedo ejecutar JVM de 32 bits. Entonces, no creo que os.arch te ayude. – YoK

4

En su propio código Java, usted no tiene que hacer nada especial con respecto a los 32 o 64 bits. A diferencia de, por ejemplo, C y C++, un int en Java siempre es de 32 bits y un long es siempre de 64 bits (en C y C++, el tamaño de esos tipos depende del sistema).

No hay versiones de 32 bits y de 64 bits separados de código de bytes de Java; el bytecode es exactamente el mismo, independientemente del hecho de que la JVM en la que se esté ejecutando sea de 32 bits o de 64 bits. No tiene que compilar su fuente Java de manera diferente para 32 bits o 64 bits. Con respecto a la funcionalidad, no importa para su aplicación Java si se ejecuta en una JVM de 32 o 64 bits.

Puede haber algunas diferencias técnicas que ya jowierun mencionan. También puede haber diferencias de rendimiento; por ejemplo, la JVM de 64 bits de Oracle para Windows está ajustada de forma diferente que la JVM de 32 bits, y realiza otras optimizaciones de JIT. Me di cuenta de esto con una aplicación de cálculo intensivo que escribí recientemente; en una JVM de 64 bits se ejecuta mucho más rápido que en una JVM de 32 bits. (Pero eso es solo un ejemplo, no tome esto como prueba de que cualquier programa se ejecuta mucho más rápido en una JVM de 64 bits).

+1

Uno de los motivos por los que la JVM x86 de 64 bits (y muchos otros programas de 64 bits) se ejecuta más rápido es porque tiene más registros para trabajar con http://www.oracle.com/technetwork/java/hotspotfaq-138619.html# 64bit_performance –

1

Tiene estas preguntas al dorso.

  1. No tiene que hacer nada en su código Java, se ejecutará tanto en 32 como en 64 bits.
  2. Por lo tanto, no necesita saber si es una JVM de 64 bits o no.
+6

@downvoter: por favor explique. Los votos negativos inexplicables no ayudan a nadie: no le muestran al público lo que está mal con la respuesta y tampoco ayudan al cartel. – EJP

+0

Creo que es porque solo respondiste el 20% de la pregunta. Además, la parte posterior a ** por lo tanto ** es una suposición de tu parte – Pacerier

+0

@Pacerier. Esperaría un voto a la baja si hubiera algo * incorrecto * allí, no solo para una respuesta incompleta. Me parece extraño. – EJP

2

Si va a escribir código nativo utilizando la interfaz nativa de Java (JNI), debe tener mucho cuidado al escribir el código C apropiado que se ejecutará en las máquinas de 64 y 32 bits. Asegúrese de utilizar los tipos de Java adecuados al pasar argumentos a/desde el código java (JNI proporciona un conjunto de tipos para tipos Java), especialmente al convertir matrices. Y al probar su código nativo, pruebe en ambas arquitecturas (-m32 forzará un arco de 32 bits en GNU gcc) con diferentes JVM.

Cuestiones relacionadas