Java: Wie behandelt die VM eine 64-Bit-Länge auf einem 32-Bit-Prozessor?

8

Wie behandelt die JVM ein primitives "long", also 64 Bit, auf einem 32-Bit-Prozessor?


Kann es auf einer Multi-Core-32bit-Maschine mehrere Kerne parallel nutzen? Wie viel langsamer sind 64-Bit-Operationen auf einer 32-Bit-Maschine?

    
Andrew Turner 26.10.2008, 01:09
quelle

2 Antworten

8

Es kann mehrere Kerne verwenden, um verschiedene Threads auszuführen, es wird jedoch nicht parallel für 64-Bit-Berechnungen verwendet. Eine 64-Bit-Länge wird grundsätzlich als zwei 32-Bit-Inte gespeichert. Um sie hinzuzufügen, werden zwei Additionen benötigt, um das Übertragsbit zu verfolgen. Multiplikation ist so, als würde man zwei zweistellige Zahlen multiplizieren, mit der Ausnahme, dass jede Zahl in der Basis 2 ^ 32 statt in der Basis 10 ist. Also weiter für andere arithmetische Operationen.

Edit über Geschwindigkeit: Ich kann nur über den Geschwindigkeitsunterschied schätzen. Eine Addition erfordert zwei Additionen statt einer Addition, und eine Multiplikation würde (glaube ich) vier Multiplikationen anstelle von Eins erfordern. Ich vermute jedoch, dass, wenn alles in Registern gehalten werden kann, die tatsächliche Zeit für die Berechnung im Vergleich zur Zeit, die zweimal für den Lese- und zweimal für den Schreibvorgang benötigt wird, in den Schatten gestellt wird Operationen. Ich stelle mir vor, dass es auf den Prozessor, die bestimmte JVM-Implementierung, die Mondphase, usw. ankommt. Wenn Sie nicht viel Zahlen machen, würde ich mir keine Sorgen machen. Die meisten Programme verbringen die meiste Zeit damit, auf IO von / von der Festplatte oder dem Netzwerk zu warten.

    
Glomek 26.10.2008, 01:13
quelle
5

Von TalkingTree und dem Java HotSpot FAQ :

  

Im Allgemeinen kommt es bei 64-Bit-VMs zu kleineren Leistungseinbußen, wenn größere Speichermengen adressiert werden können, als wenn dieselbe Anwendung auf einer 32-Bit-VM ausgeführt wird. Dies liegt an der Tatsache, dass jeder native Zeiger im System 8 statt 4 Bytes belegt. Das Laden dieser zusätzlichen Daten hat Auswirkungen auf die Speichernutzung, was zu einer etwas langsameren Ausführung führt, abhängig davon, wie viele Zeiger während der Ausführung geladen werden Ihr Java-Programm.
  Die gute Nachricht ist, dass die Java-VM mit AMD64- und EM64T-Plattformen, die im 64-Bit-Modus ausgeführt werden, einige zusätzliche Register erhält, mit denen sie effizientere native Befehlssequenzen generieren kann. Diese zusätzlichen Register erhöhen die Leistung bis zu dem Punkt, an dem bei einem 32- bis 64-Bit-Ausführungsgeschwindigkeit oft überhaupt kein Leistungsverlust auftritt.

     

Der Leistungsunterschied beim Vergleich einer auf einer 64-Bit-Plattform ausgeführten Anwendung mit einer 32-Bit-Plattform auf SPARC liegt beim Wechsel zu einer 64-Bit-VM in der Größenordnung von 10-20%. . Auf AMD64- und EM64T-Plattformen liegt dieser Unterschied zwischen 0 und 15%, abhängig von der Anzahl der Zeiger, die auf Ihre Anwendung zugreifen.

    
VonC 26.10.2008 01:25
quelle

Tags und Links