Wie kann ich feststellen, ob die JVM, in der meine Anwendung läuft, 32-Bit oder 64-Bit ist? Welche Funktionen oder Eigenschaften kann ich verwenden, um dies innerhalb des Programms zu erkennen?
Antworten
Zu viele Anzeigen?Unter Windows 7 im Menü " Bedienfeld " unter " Programme | Programme und Funktionen "Die 64-Bit-Varianten von JRE und JDK werden mit " 64-Bit " in Klammern (z. B. " Java SE Entwicklungskit 7 Update 65 (64-Bit) "), während bei den 32-Bit-Varianten die Variante nicht in Klammern angegeben wird (z. B. nur " Java SE Entwicklungskit 8 Update 60 ").
Para Windows
können Sie die Java
Heimatort. Wenn sie enthält (x86)
es ist 32-bit
ansonsten 64-bit
:
public static boolean is32Bit()
{
val javaHome = System.getProperty("java.home");
return javaHome.contains("(x86)");
}
public static boolean is64Bit()
{
return !is32Bit();
}
Beispielpfade:
C:\Program Files (x86)\Java\jdk1.8.0_181\bin\java.exe # 32-bit
C:\Program Files\Java\jdk-10.0.2\bin\java.exe # 64-bit
Warum sollte man sich um eine Windows
einzige Lösung?
Wenn Sie wissen müssen, mit welcher Bit-Version Sie arbeiten, sind Sie wahrscheinlich mit nativem Code auf Windows
Die Plattformunabhängigkeit ist also ohnehin nicht mehr gegeben.
- See previous answers
- Weitere Antworten anzeigen
4 Stimmen
Nur aus reiner Neugierde: Warum müssen Sie die natürliche Größe des Systems kennen? Details wie diese sind in Java abstrahiert, so dass Sie sie (zumindest theoretisch) nicht kennen müssen.
3 Stimmen
Damit kann ich den Speicherbedarf für Objekte aufgrund von Zeigern grob abschätzen. Neugier auch - schien, wie es sollte ein Weg sein, aber ich hatte noch nie davon gehört.
13 Stimmen
Eine weitere Situation, in der es wichtig ist, zwischen 32- und 64-Bit-JVMs zu unterscheiden, ist bei gemappten Dateien. Auf 32-Bit-Systemen können nur 2 GB abgebildet werden. Daher ist es wichtig, Dateisegmente entsprechend zuzuordnen und die Zuordnung aufzuheben, damit diese Grenze nicht überschritten wird, während die Grenze auf 64-Bit-JVMs viel, viel, viel höher ist.
0 Stimmen
@simonegianni wäre ein solches Mapping nicht der perfekte Test?
2 Stimmen
Es ist wirklich schön, wenn man den numerischen Algorithmus wählen kann, der auf dem betreffenden Rechner am schnellsten ist.
0 Stimmen
Beachten Sie auch, dass sowohl die Erkennungsmechanismen als auch die Objektgröße herstellerabhängig sind.
0 Stimmen
Beachten Sie, dass Java einige Tricks anwendet, damit "gewöhnliche Objektzeiger" auf 64-Bit-JVMs mit typischen Heap-Limits 32-Bit sind.
1 Stimmen
@PatrickNiedzielski Eine weitere Situation, in der die Unterscheidung zwischen 32- und 64-Bit-JVMs von größter Bedeutung ist, ist, wenn ein Java-Programm eine externe ausführbare Datei starten muss, für die beide Versionen existieren. Zum Beispiel beim Schreiben von Selenium-Tests, wo der richtige Browser-Treiber gestartet werden muss. Das gleiche gilt für die Unterscheidung des Betriebssystems. Ich bin sicher, man kann sich noch einige weitere Fälle vorstellen, in denen etwas, das eigentlich "abstrahiert" werden sollte, nicht existiert.