Domanda

In che modo la JVM gestisce un primitivo "long", che è 64 bit, su un processore a 32 bit?


Può utilizzare core multipla in parallelo quando su una macchina multi-core a 32 bit?
Quanto sono più lente le operazioni a 64 bit su una macchina a 32 bit?

È stato utile?

Soluzione

Può utilizzare più core per eseguire thread diversi, ma non li utilizza in parallelo per i calcoli a 64 bit. Una lunghezza di 64 bit viene sostanzialmente memorizzata come due pollici a 32 bit. Per aggiungerli, sono necessarie due aggiunte, tenendo traccia del bit di trasporto. La moltiplicazione è un po 'come moltiplicare due numeri a due cifre, tranne per il fatto che ogni cifra è nella base 2 ^ 32 anziché nella base 10. Quindi, per altre operazioni aritmetiche.

Modifica della velocità: posso solo immaginare la differenza di velocità. Un'aggiunta richiede due aggiunte invece di una e una moltiplicazione richiederebbe (credo) quattro moltiplicazioni anziché una. Tuttavia, sospetto che se tutto potesse essere tenuto nei registri, il tempo effettivo per il calcolo sarebbe ridotto dal tempo richiesto per andare in memoria due volte per la lettura e due volte per la scrittura, quindi la mia ipotesi è circa il doppio della maggior parte operazioni. Immagino che dipenderebbe dal processore, dalla particolare implementazione di JVM, dalla fase della luna, ecc. A meno che tu non stia facendo uno scricchiolio pesante dei numeri, non me ne preoccuperei. La maggior parte dei programmi trascorre la maggior parte del tempo in attesa di IO da / sul disco o sulla rete.

Altri suggerimenti

Da TalkingTree e le FAQ su HotSpot Java :

  

In generale, i vantaggi della capacità di gestire grandi quantità di memoria derivano da una piccola perdita di prestazioni nelle macchine virtuali a 64 bit rispetto all'esecuzione della stessa applicazione in una macchina virtuale a 32 bit. Ciò è dovuto al fatto che ogni puntatore nativo nel sistema occupa 8 byte anziché 4. Il caricamento di questi dati extra ha un impatto sull'utilizzo della memoria che si traduce in un'esecuzione leggermente più lenta a seconda di quanti puntatori vengono caricati durante l'esecuzione di il tuo programma Java.
  La buona notizia è che con le piattaforme AMD64 ed EM64T in esecuzione in modalità 64 bit, la VM Java ottiene alcuni registri aggiuntivi che può utilizzare per generare sequenze di istruzioni native più efficienti. Questi registri extra aumentano le prestazioni al punto in cui spesso non vi è alcuna perdita di prestazioni quando si confrontano le velocità di esecuzione da 32 a 64 bit.

     

La differenza di prestazioni rispetto a un'applicazione in esecuzione su una piattaforma a 64 bit rispetto a una piattaforma a 32 bit su SPARC è dell'ordine del 10-20% di degrado quando si passa a una VM a 64 bit . Su piattaforme AMD64 ed EM64T questa differenza varia dallo 0 al 15% a seconda della quantità di puntatore che accede alla tua applicazione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top