萌えハッカーニュースリーダー

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

出典: https://mostlynerdless.de/blog/2025/06/11/java-25s-new-cpu-time-profiler-1/
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

正解!…って、ロボットに聞く方が間違ってたのじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search