Javaコード内から自分のアプリケーションで使用できるコアの数を調べるにはどうすればよいですか?Javaでのコア数の確認
答えて
int cores = Runtime.getRuntime().availableProcessors();
cores
の場合は、1未満である、どちらかあなたのプロセッサが死ぬしようとしている、またはあなたのJVMがそれに重大なバグがある、または宇宙が爆破しようとしています。
'Runtime'クラスから集められた情報のほとんどがストリング、私はこれが "整数"を返すことを示すことが役に立つと思った。 –
これにより、論理スレッドの数がわかります。例えばハイパースレッディングをオンにしている場合は、コアの数の2倍になります。 –
@Peter、ええ、良い点。私は自分のi7マシンでこのアクションを実行するとき自分自身がヒルの王様だと感じました! :) –
これはCygwinのとWindows上で動作しますがインストールさ:
System.getenv("NUMBER_OF_PROCESSORS")
私はこれを試しましたが、nullを返しました:( – Adelin
Cygwinがインストールされていますが、これはWindowsのシェルから動作します: '' groovy -e "println System.getenv( 'NUMBER_OF_PROCESSORS')' '' –
わかりませんこれが標準のWindows環境変数であれば私の頭の上から外してください: '' set NUMBER_OF_PROCESSORS'''はWindowsのコマンドラインから動作します –
を使用すると、物理コアの数を取得したい場合は、CMDおよびターミナルコマンドを実行することができ、その後、あなたが必要とする情報を取得するために、出力を解析します。以下に、物理コアの数を返す関数を示します。
private int getNumberOfCPUCores() {
OsValidator osValidator = new OsValidator();
String command = "";
if(osValidator.isMac()){
command = "sysctl -n machdep.cpu.core_count";
}else if(osValidator.isUnix()){
command = "lscpu";
}else if(osValidator.isWindows()){
command = "cmd /C WMIC CPU Get /Format:List";
}
Process process = null;
int numberOfCores = 0;
int sockets = 0;
try {
if(osValidator.isMac()){
String[] cmd = { "/bin/sh", "-c", command};
process = Runtime.getRuntime().exec(cmd);
}else{
process = Runtime.getRuntime().exec(command);
}
} catch (IOException e) {
e.printStackTrace();
}
BufferedReader reader = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String line;
try {
while ((line = reader.readLine()) != null) {
if(osValidator.isMac()){
numberOfCores = line.length() > 0 ? Integer.parseInt(line) : 0;
}else if (osValidator.isUnix()) {
if (line.contains("Core(s) per socket:")) {
numberOfCores = Integer.parseInt(line.split("\\s+")[line.split("\\s+").length - 1]);
}
if(line.contains("Socket(s):")){
sockets = Integer.parseInt(line.split("\\s+")[line.split("\\s+").length - 1]);
}
} else if (osValidator.isWindows()) {
if (line.contains("NumberOfCores")) {
numberOfCores = Integer.parseInt(line.split("=")[1]);
}
}
}
} catch (IOException e) {
e.printStackTrace();
}
if(osValidator.isUnix()){
return numberOfCores * sockets;
}
return numberOfCores;
}
OSValidatorクラス:ほとんどすべての意図および目的 "コア==プロセッサ" は、
public class OSValidator {
private static String OS = System.getProperty("os.name").toLowerCase();
public static void main(String[] args) {
System.out.println(OS);
if (isWindows()) {
System.out.println("This is Windows");
} else if (isMac()) {
System.out.println("This is Mac");
} else if (isUnix()) {
System.out.println("This is Unix or Linux");
} else if (isSolaris()) {
System.out.println("This is Solaris");
} else {
System.out.println("Your OS is not support!!");
}
}
public static boolean isWindows() {
return (OS.indexOf("win") >= 0);
}
public static boolean isMac() {
return (OS.indexOf("mac") >= 0);
}
public static boolean isUnix() {
return (OS.indexOf("nix") >= 0 || OS.indexOf("nux") >= 0 || OS.indexOf("aix") > 0);
}
public static boolean isSolaris() {
return (OS.indexOf("sunos") >= 0);
}
public static String getOS(){
if (isWindows()) {
return "win";
} else if (isMac()) {
return "osx";
} else if (isUnix()) {
return "uni";
} else if (isSolaris()) {
return "sol";
} else {
return "err";
}
}
}
これはOOPされるのに適したコードです。 :) –
OSValidatorクラスはOSXをサポートしますが、getNumberOfCoresはそれを完全に無視します。とにかく、https://blog.opengroup.org/2015/10/02/mac-os-x-el-capitan-achieves-unix-certification/ですから、「Mac」はあなたのisUnix()内にあるはずですが.. 。 BSD、OSXの場合、lscpuコマンドは存在せず、getNumberOfCoresは0を返します。 –
Linuxでは、 "Socket(s)"によって複数の "ソケットごとのコア"を設定する必要があります。また、私は正規表現を使用します。 –
- 1. ASPコアの画像の確認/確認
- 2. ASP.NETコア1.0でのセッションの確認
- 3. TensorFlow(Mac OS X):CPUコア数を確認できません:
- 4. SLURM:1ノードあたりのコア数とジョブあたりのコア数を確認してください
- 5. java errorhandling:numberformatexceptionsの確認方法
- 6. Javaマルチスレッド同期の確認?
- 7. Javaロボットの確認mouseclick
- 8. エラーページwebdriverの確認java
- 9. Javaの確認ボックス|コンパイルエラー
- 10. Javaの処理確認ダイアログボックス
- 11. カスタムペアリングのWindows iotコアで確認を提供する方法
- 12. Javaスレッドの数>コア数とガベージコレクション
- 13. Java - オンラインパスワードを確認
- 14. javaのハッシュマップデータで変数値を確認する
- 15. Javaで作成されたオブジェクトの数を確認します
- 16. 複数の認証ミドルウェアASP.NETコア
- 17. node.jsのパスワードをAspNetUsersの.netコアから確認する方法
- 18. ドッカーコンテナが使用するコアの数を確認する方法は?
- 19. コアJava静的変数ロード
- 20. ローカルアクティブディレクトリでの.Netコア認証
- 21. Java EEのコア
- 22. JavaのMySQLの接続確認テスト
- 23. Javaのmailtoリンクの有効性確認
- 24. arraylistのJava未確認の変換
- 25. opensslでJavaでデジタル署名を確認
- 26. Javaの桁数が奇数であることを確認する方法は?
- 27. Javaコード文字と数字のパスワードを確認しますか?
- 28. Java:リフレクションコードの使用状況を確認
- 29. Java 8ジャクソンの妥当性確認
- 30. ドロー(Javaゲーム)の確認方法
。 –
純粋にJavaを使用して、物理的にマシンのハードコア数を確認します。 * Runtime.getRuntime()。availableProcessors()*を使用すると、起動時にJavaプログラムが使用できるコアの数を簡単に見つけることができます。すべての主要な現代のOSがCPU親和性を設定する能力(すなわち、特定の数のコアのみにアプリケーションを制限する)のため、これは留意すべき懸念事項である。 – SyntaxT3rr0r
論理コアまたは物理コア?重要な違いがあります。 –