2008-10-14 12 views
13

Ich bin ein absoluter n00b in der Java-Plattform Ich würde gerne wissen, ob ich etwas in meinem Code ändern müssen, um die Vorteile von 64bit JRE zu bekommen?Vorteile von 64bit Java-Plattform

oder ist es so etwas wie wenn ich es mit "java -d64" einleite wird es in einem Turbo-Modus laufen?

Ihre Hilfe wird sehr geschätzt

Antwort

3

Sie sollten nichts ändern. Im Gegensatz zu C oder C++ hat Java eine Spezifikation, die dafür sorgt, dass Ints (und andere Datentypen) immer die gleiche Länge haben, egal auf welcher Plattform Sie sich befinden.

1

Ja, Sie müssen nichts ändern. Es ist die JRE, die anders ist, nicht der Code, den Sie schreiben.

5

Da die JVM, in der der Code ausgeführt wird, sich gleich verhalten sollte (Integer sind immer 32 Bit signiert, usw.), wird Ihr Code (theoretisch) garantiert identisch ausgeführt, egal auf welcher Plattform Sie ihn ausführen.

Der Unterschied von 32/64 Bit liegt darin, wie die JVM die Laufzeit optimieren kann. Während der ausgeführte Bytecode derselbe bleibt, kann er (oder auch nicht) auf andere Weise optimiert werden.

Kurz gesagt, ein 64-Bit-System mit Java könnte den Code schneller ausführen als ein 32-Bit-System.

7

Nein, Sie müssen nichts ändern. Es gibt keinen inhärenten Vorteil, 64 Bit zu verwenden. In der Tat wird es Ihr Programm im Speicher größer machen, da alle Zeiger 64 statt 32 Bit breit werden.

Der einzige Vorteil kommt, wenn Sie 64-Bit-Berechnungen durchführen, z. B. viele 'Longs' in Ihrem Code verwenden oder wenn Ihre App mehr als 4 GB Speicher benötigt.

+0

Gibt es keinen Vorteil, zumindest unter Windows, die Möglichkeit, mehr Speicher als etwa 1,5 GB zu verwenden? Es gibt einige solche Einschränkungen für einen 32-Bit-Java-Prozess. http://mystyleit.com/blogs/mystureit/archive/2009/05/27/32bit-windows-memory-and-java.aspx – Jonik

+1

Sind nicht die neuesten 64-Bit-JVMs ein wenig schlauer beim Zuweisen von Referenzen obwohl? Das heißt, es werden nur 32-Bit-Referenzen verwendet, wenn nicht das volle 64-Bit benötigt wird. Ich glaube, ich habe das irgendwo gelesen. –

13

Meine vorherige Version, obwohl nicht falsch, war eine schnelle schriftliche Vereinfachung.

Wenn Sie von 32 auf 64 Bits umschalten, wird Ihre Anwendung nicht automatisch schneller ausgeführt. In einigen Fällen führt dies möglicherweise zum Gegenteil. Auf der "negativen" Seite Das Rückgängigmachen der Referenzierung von Speicherzeigern in der JVM kann bei 64-Bit-Zeigern länger als 32 Bit dauern. Eine vollständige Speicherbereinigung und Komprimierung eines 16-GB-Heaps dauert wahrscheinlich länger als bei einem 2-GB-Heap.

Auf der positiven Seite: Es gibt 64-Bit-Prozessor Anweisungen, die effektiver sind als die 32-Bit-Prozessoren. 64-Bit-JVM ermöglicht es Ihnen, eine Heap-Größe von 2^32-mal größer als die, etwas weniger als 4 GB, die Sie mit 32-Bit erhalten können. (Wenn Sie es sich leisten können, diese Menge an RAM zu kaufen) Einige JVMs können mit komprimierten Referenzen arbeiten, wenn Sie eine Heap-Größe von weniger als 4 GB haben, was Ihnen den Vorteil von 64-Bit-Anweisungen bietet, ohne den 64-Bit-Preis zu entrichten .

Wenn Sie eine gute JVM haben, würde ich auf 64 Bits gehen, egal, die Heap-Größe, nur darauf vorbereitet, dass Sie einen Leistungshit für einen wirklich großen Haufen nehmen müssen.

8

Ich glaube nicht, 64-Bit-JVM wird die Leistung der Anwendung zu gewinnen? Wie?

In der Tat sind 64-Bit-Prozessoren ein wenig langsamer. Sie haben eine kompliziertere Dekodierpipeline (Rückwärtsunterstützung von 32-Bit-Operationen). Sie benötigen mehr Speicherdurchsatz (alle Zeiger sind doppelter Größe, richtig?). Das einzige, was Sie auf 64-Bit-Prozessor haben, ist viel RAM.Und Größe ist Geschwindigkeit, wie wir wissen. Eine Menge RAM kann die Leistung einiger Anwendungen sehr angenehm machen (wenn die Anwendung es verwenden könnte). Also 64 Bit - nein. Viel RAM - definitiv ja.

Es gibt noch eine Sache, die 64-Bit-Prozessoren schneller erledigen können. Atomisches Schreiben/Lesen von 64-Bit-Zahlen. Wenn Sie mit 64-Bit-Zahlen arbeiten (lange in Java), wären 64-Bit-Prozessoren besser, weil sie Maschinen-CAS-Anweisungen zum Arbeiten mit dieser Art von Zahlen haben.

+2

Der AMD64-Befehlssatz macht mehr Register für Programme verfügbar, was zu einer möglichen Verbesserung der Ausführungsgeschwindigkeit führt. – Sebastian

2

Haben Sie eine JNI in Ihrem Anwendungscode? Dann müssen Sie sich vielleicht Sorgen um 32 native 64-Bit-Binärdateien machen.

32 oder 64 ist mit Ihrem Java-Code identisch. Die Leistungsaspekte scheinen bereits von früheren Postern gut abgedeckt zu sein.

0

Ich habe festgestellt, dass 64-Bit-JVMs langsamer als 32-Bit-Versionen waren. Mit der neuesten Version von Java 6 Update 14 habe ich jedoch festgestellt, dass viele meiner Tests mit der 64-Bit-Version gegenüber der 32-Bit-Version marginal schneller sind. In jedem Fall gibt es nur 5% bis 10% Unterschied.

Ob Ihr Programm eine 32-Bit- oder 64-Bit-Version verwendet, hängt davon ab, welche JVM Sie verwenden. Wie bereits erwähnt, müssen Sie überprüfen, ob Sie geeignete gemeinsame Bibliotheken haben. (oder idealerweise keine)

Der Hauptunterschied besteht in der Möglichkeit, mehr Speicher zu verwenden, wenn Sie 4 GB oder mehr benötigen.

0

Try this:

public class Benchmark { 
public static void main(String args[]) { 
long time = System.currentTimeMillis(); 
for (int a = 1; a < 900000000; a++) { 
    for (int b = 1; b < 20; b++) { 
    } 
} 
long time2 = System.currentTimeMillis() - time; 
System.out.println("\nTime counter stopped: " + time2); 

}

In 32 und 64 Bit und lachen über den Unterschied.

+5

Eine Beschreibung des Unterschieds würde sich in diesem Fall als nützlich erweisen. –