JRE per 64-bit e 64-bit Java?

2

FWIK Java può essere eseguito su un sistema a 64 bit, nessun problema. Mi piacerebbe sapere come Java supporta le funzionalità a 64 bit, ad esempio System.identityHashCode() restituisce un int a 32 bit, è normale vedere il puntatore dell'oggetto (indirizzo di memoria) restituito. Se Java a 64 bit restituisce invece una long? In caso contrario, come sarebbe la scala Java nei sistemi a 64 bit?

    
posta Xiè Jìléi 20.05.2011 - 05:26
fonte

2 risposte

4

FWIK Java can run on 64-bit system, no problem.

Una corretta.

I'd like to know how Java support 64-bit features.

Java supporta 64 bit in modo tale da non introdurre differenze comportamentali. Un programma Java verrà eseguito su piattaforme a 32 bit o 64 bit senza modifiche. Tutti i tipi primitivi sono identici, le API delle librerie di classi sono identiche, i formati di bytecode sono gli stessi. Per quanto riguarda il programma, l'unica differenza è che puoi allocare più cose prima che il tuo heap si riempia.

System.identityHashCode() returns a 32-bit int, it's common to see the object pointer (memory address) is returned.

impreciso. Quello che vedi è un valore che può o meno essere correlato all'indirizzo di memoria dell'oggetto in qualche momento nella vita dell'oggetto. Anche se è un indirizzo di memoria, non può essere usato come uno. Non è possibile ripristinare il valore int in un riferimento in puro Java. (Anche con JNI / JNA sarebbe altamente inaffidabile ... quindi non pensare di farlo!)

Un hashcode di identità è un numero "univoco". Questo è tutto.

Should 64-bit Java returns long instead?

No. Ciò renderebbe le librerie di classi diverse per Java a 32 bit e 64 bit e impedirebbe l'esecuzione dello stesso codice su entrambe le piattaforme.

If not, how would Java scale to 64-bit systems?

Semplicemente. Ci sono uno o due "problemi". Ad esempio, le dimensioni degli array e le lunghezze delle stringhe sono limitate ai valori diint di 32-bit%. Ciò significa che non è possibile sfruttare appieno l'hardware; per esempio. non puoi schierare con più di 2^31 elementi su una JVM a 64 bit. (Ma se poteste, ci sarebbero problemi di compatibilità tra JVM a 32 bit e 64 bit e applicazioni progettate per funzionare su due versioni.)

Il tipo di ritorno identityHashCode non è un problema reale perché NON è garantito che il valore sia correlato all'indirizzo macchina e non è possibile utilizzarlo come indirizzo macchina.

    
risposta data 20.05.2011 - 05:52
fonte
1

La comprensione di base della JVM non è corretta.

Il comportamento della JVM è definito molto rigorosamente nella specifica del linguaggio Java e i dettagli esatti della piattaforma sottostante sono irrilevanti fintanto che la JVM si comporta come specificato.

Fondamentalmente puoi aspettarti che un programma Java ben scritto venga eseguito su qualsiasi JVM, essendo esso a 32-bit o 64-bit senza alcuna differenza di comportamento in quanto la JVM si comporta allo stesso modo.

Le principali differenze da tenere a mente tra 32 e 64 bit sulla stessa piattaforma sono

  • Le JVM a 64 bit possono accedere a molta più memoria rompendo la barriera "circa 2 GB".
  • L'utilizzo della memoria per lo stesso programma è leggermente più grande su 64-bit che su 32-bit.

In altre parole, i tuoi programmi dovrebbero essere pubblicati invariati.

Nota: se il tuo programma utilizza codice nativo devi considerare questa una nuova piattaforma separata. Un esempio sta utilizzando Eclipse SWT invece di Swing.

    
risposta data 20.05.2011 - 09:56
fonte

Leggi altre domande sui tag