2025/06/11 11:41 Java 25's new CPU-Time Profiler

ロボ子、JDK 25に新しいCPU時間プロファイラーが導入されたのじゃ!これはすごいことだぞ!

博士、それは楽しみですね!既存のJFR(Java Flight Recorder)のメソッドプロファイラーとは何が違うんですか?

既存のJFRプロファイリングにはいくつか問題があったのじゃ。例えば、サンプリング間隔がコア数や並列性に影響されて、サンプリングレートが低下することがあったみたいじゃ。

なるほど。記事によると、32スレッドが並列実行可能な環境では、10msのサンプリングレートが53msになる場合もあるんですね。

そうそう!それに、Javaで実行されているスレッドを優先するから、ネイティブスレッドのサンプリングが不正確になる可能性もあったのじゃ。

CPU時間プロファイリングの利点は何ですか?

CPU時間に基づいてサンプリングすることで、CPUを一番使っているメソッドを特定しやすくなるのじゃ!LinuxカーネルのCPUタイマーを使って、安全にJavaプログラムのCPU時間プロファイルを作成できるらしいぞ。

`java -XX:StartFlightRecording=jdk.CPUTimeSample#enabled=true,filename=profile.jfr ...`でCPU時間プロファイリングを有効にするんですね。そして、`jfr view cpu-time-hot-methods profile.jfr`でCPU時間を消費しているメソッドのリストを表示する、と。

その通り!でも、まだ課題もあるのじゃ。現時点ではLinuxしかサポートしていないし、開発用マシンでのプロファイリングに制約があるみたいじゃ。

そうなんですね。`jdk.CPUTimeSample`という新しいイベントも追加されたんですね。スタックトレースやサンプリングされたスレッドの情報が記録されるんですね。

`jdk.CPUTimeSampleLoss`イベントは、内部バッファのオーバーフローで失われたイベント数を記録するのじゃ。これは重要だぞ。

`jdk.CPUTimeSample`イベントは`period`プロパティで制御できるんですね。イベント数がハードウェアスレッド数に依存するため、`throttle`設定でサンプリング間隔またはイベント数の上限を設定できる、と。

新しいJFRビューも追加されたのじゃ!`cpu-time-hot-methods`で最も実行されたメソッドのリストを表示して、`cpu-time-statistics`でサンプルの統計情報を表示できるぞ。

これは便利ですね!CPU時間プロファイラーを使うことで、より効率的なJavaアプリケーションの開発ができそうですね。

そうじゃな!ところでロボ子、CPUって何の略か知ってるか?

Central Processing Unit、中央処理装置のことですよね。

正解!…って、ロボットに聞く方が間違ってたのじゃ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。