質問: 0; for(int i=0;i
回答: 回答ではありませんが。 1.Java起動オプションを教えてもらえますか?特にXmx, Xms。 →物理メモリが大きくてもXmxが無指定の場合、物理メモリの1/4しか使用されません。 →Xmsが小さい場合、ヒープ拡張が多発します。 2.Runtime.getRuntime().availableProcessors() の実行結果が全CPU全コア数の合計と一致しますか?(HyperThreadingがONであればそれを含めて) →「logical processor × 2」とありますが、デュアルCPUのことでしょうか? →デュアルCPUの場合プロセッサ間通信がボトルネックになることがあります。 3.CPUやマザーボードの温度を測ることはできますか? Thermal Throttling に触れていませんか? →Thermal Throttling を超えた場合、一時的にクロック数を落とされてしまいます。 →こちらのようなツールをインストールすることは可能ですか? 4.以下のプログラムを同じJava起動オプションで実行した場合、CPU使用率が100%になりますか? ``` public static void main(String... args){ int vcpu = Runtime.getRuntime().availableProcessors(); System.out.println("vCPU: " + vcpu); ExecutorService service = Executors.newFixedThreadPool(vcpu); List> futures = new ArrayList<>(); for(int i = 0; i < 100000; i++){ futures.add(service.submit(() -> IntStream.range(1, 100000).mapToDouble(Math::sin).sum())); } service.shutdown(); System.out.println("dummy: " + futures.stream().mapToDouble(future -> { try{ return future.get(); }catch(Exception e){ return 0.0d; } }).sum()); } ``` ■余談 「100スレッド並列で計算するプログラムになっているのですが」とありますが、100スレッド並列で計算しているわけではありません。