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.