2

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

4

1 に答える 1

3

Sigar と純粋な Java は、オペレーティング システムではなく、常に JVM のアーキテクチャを返します。これは、OS に関する情報がほとんどのアプリケーションにとって役に立たないためです。

99.9% のケースで、OS のバージョンではなく、JVM プロセスの正確なアーキテクチャを知る必要があります。これはアプリケーションに直接影響するためです。JVM アーキテクチャは、アプリが使用する必要があるネイティブ ライブラリ、メモリ構造、CPU 実行モード、その他多くの側面を決定します。

x64 Windows で x86 JVM を実行しているとします。アプリケーションで使用できるメモリの量を決定する必要があります。JVM 情報に基づいて、この質問に答えることができます。OSのバージョンに基づいて、私は何も言えません。

そのため、OS 情報を使用すると誤った判断につながる可能性があるため、まったく使用しないことをお勧めします。ユーザーに表示するだけでも。

なんらかの理由で OS のバージョンを確認する必要がある場合は、これを 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、同じコードでコマンドを使用してアーキテクチャを取得できます。

システムはこの記事のように決定できます

于 2013-11-23T12:54:03.317 に答える