web-dev-qa-db-ja.com

OSビットタイプを見つける方法

OSの種類を知りたいのですが、64ビットOSか32ビットOSかを意味します。しかし、OSに関するシステムプロパティを取得する32ビット/ 64ビット実行可能ファイルとは異なる応答を取得しています

システムプロパティから詳細を取得しています。そして私は64ビットマシンとOSウィンドウ8.1X64を持っています

        "OS Architecture : " + System.getProperty("os.Arch"));

        "OS Name : " + System.getProperty("os.name"));

        "OS Version : " + System.getProperty("os.version")

        "Data Model : " + System.getProperty("Sun.Arch.data.model"));

実行中64bit実行可能次の応答を取得します。


OSアーキテクチャAMD64

OS名:Windows 8

OSバージョン:6.2 AMD64

データモデル:64


実行中2ビット実行可能次の応答を取得します。


OSアーキテクチャx86

OS名:Windows 8

OSバージョン:6.2 x86

データモデル:32


OSの実際のビットタイプを取得するにはどうすればよいですか?

13
Tej Kiran
System.getProperty("os.Arch");

すべてのプラットフォームで使用できるはずです。詳細については、Javaシステムプロパティチュートリアルを参照してください。

ただし、32ビットJVMの場合、64ビットWindowsプラットフォームはJVMに依存します。実際、64ビットWindowsは、古い32ビットプログラムが64ビットOSで正しく動作するのを支援するために、環境に関する32ビットプロセスに依存します。詳細については、WOW64に関するMSDNの記事を参照してください。

WOW64の結果として、System.getProperty( "os.Arch")を呼び出す32ビットJVMは "x86"を返します。 Windowsの基盤となるOSの実際のアーキテクチャを取得する場合は、次のロジックを使用します。

String Arch = System.getenv("PROCESSOR_ARCHITECTURE");
String wow64Arch = System.getenv("PROCESSOR_ARCHITEW6432");

String realArch = Arch.endsWith("64")
                  || wow64Arch != null && wow64Arch.endsWith("64")
                      ? "64" : "32";

参照

4
Darshan Patel

これはあなたを助けるはずです

System.getProperty("os.Arch");

jREのアーキテクチャが32ビットの場合、「x86」を返します。 JNIを使​​用してシステムの実際のアーキテクチャを取得するには、ネイティブコードを作成する必要があります。

1
Keerthivasan

最良の解決策(クロスプラットフォームIMOでもあります)はここに与えられた答えです: https://stackoverflow.com/a/2269242/1973164

Os.Archシステム変数を読み取ることを正確に信頼していません。ユーザーが64ビットシステムで64ビットJVMを実行している場合は機能します。ユーザーが64ビットシステムで32ビットJVMを実行している場合は、機能しません。

次のコードは、Windows64ビットオペレーティングシステムを正しく検出するために機能します。 Windows 64ビットシステムでは、環境変数「Programfiles(x86)」が設定されます。 32ビットシステムでは設定されず、Javaはnullとして読み取ります。

boolean is64bit = false;
if (System.getProperty("os.name").contains("Windows")) {
    is64bit = (System.getenv("ProgramFiles(x86)") != null);
} else {
    is64bit = (System.getProperty("os.Arch").indexOf("64") != -1);
}

Linux、Solaris、Macなどの他のオペレーティングシステムでも、この問題が発生する可能性があります。したがって、これは完全な解決策ではありません。 Macの場合、AppleはOSに一致するようにJVMをロックダウンするため、おそらく安全です。ただし、LinuxやSolarisなどは64ビットシステムで32ビットJVMを使用する場合があります。したがって、これは注意して使用してください。

1
TGO

System.getProperty( "os.Arch")は、実際のオペレーティングシステムではなく、常にjreのビットタイプを返します。

Jniコードとcalllを書くIsWow64Processwinapiから。あなたは窓を使っているので。

このブール関数は、プロセスが64ビットOSで実行されているかどうかを示します。

0
Sorter