x86
当我使用32位Java执行时,我有一个程序可为我提供64位系统上的体系结构类型。
如果我提供64位Java,则它会返回x64
。
Java位模式如何影响sigar输出?
还是有其他命令可以返回正确的计算机体系结构和位模式类型?
这是我的示例代码
import org.hyperic.sigar.OperatingSystem;
import org.hyperic.sigar.Sigar;
import org.hyperic.sigar.SigarException;
public class SigarInfo {
private final Sigar sigar = new Sigar();
private final OperatingSystem os = OperatingSystem.getInstance();
public static void main(String[] args) throws SigarException{
SigarInfo sysInfo = new SigarInfo();
System.out.println("Arch: "+sysInfo.os.getArch());
System.out.println("Datamodel: "+sysInfo.os.getDataModel());
}
}
在64位计算机上输出
Arch: x64
Datamodel: 64
在32位计算机上输出
Arch: x86
Datamodel: 32
在具有32位Java的64位计算机上输出
Arch: x86
Datamodel: 32
使用的版本:hyperic-sigar-1.6.4
Sigar和纯Java总是返回JVM的体系结构,而不是操作系统的体系结构。这是因为有关您的操作系统的信息对大多数应用程序无用。
在99.9%的情况下,您需要了解JVM进程的确切体系结构,而不是OS版本,因为这会直接影响您的应用程序。JVM体系结构确定您的应用程序应使用哪些本机库,内存结构,CPU运行模式以及许多其他方面。
假设您在x64 Windows上运行x86 JVM。您需要确定应用程序可以使用多少内存。基于JVM信息,我可以回答这个问题。基于操作系统版本,我什么也不能说。
因此,使用操作系统信息可能会导致错误的决定,因此我不建议您完全使用它。即使只是将其显示给用户。
如果由于某些原因确实需要确定操作系统版本,则可以在Windows上使用此版本:
Process process = Runtime.getRuntime().exec("CMD /C SYSTEMINFO | FINDSTR /B /C:\"System Type\"");
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line = bufferedReader.readLine();
if (line.indexOf("x64") > 0)
System.out.println("x64 architecure");
else
System.out.println("x86 architecure");
对于linux,您可以lsb_release -a
在同一代码中使用命令来获取体系结构。
系统可以决定,比如在这条
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句