18 プロセスにおけるイベント・ストリームの作成(アクティブ)
サンプルStreamEventsSample.javaでは、記録の作成と同時にイベント・ストリームが作成されます。
               
クラスRecordingStreamでは、ストリームと同時に記録が開始されます。サンプルでは、Thread.sleep(1000)が3回呼び出され、3つのjdk.ThreadSleepイベントが作成されます。jdk.ThreadSleepイベントが発生すると、イベント・ストリームAPIにより、このイベントが出力されます:
               
import jdk.jfr.Configuration;
import jdk.jfr.consumer.RecordingStream;
public class StreamEventsSample {
    public static void main(String... args) throws Exception {
        Configuration c = Configuration.getConfiguration("profile");
        try (RecordingStream rs = new RecordingStream(c)) {           
            rs.onEvent("jdk.ThreadSleep", System.out::println);
            System.out.println("Starting recording stream ...");
            rs.startAsync();            
            for (int i = 0; i < 3; i++) {
                System.out.println("Sleeping for 1s...");
                Thread.sleep(1000);
            }
        }
    }
}次のコマンドを使用して、StreamEventsSampleを実行します:
               
java -XX:StartFlightRecording StreamEventsSample.java次のような出力が表示されます:
Started recording 1. No limit specified, using maxsize=250MB as default.
Use jcmd 7400 JFR.dump name=1 filename=FILEPATH to copy recording data to file.
Starting recording stream ...
Sleeping for 1s...
Sleeping for 1s...
jdk.ThreadSleep {
  startTime = 00:26:42.463
  duration = 2.14 s
  time = 1.00 s
  ...
}
Sleeping for 1s...
jdk.ThreadSleep {
  startTime = 00:26:44.602
  duration = 1.04 s
  time = 1.00 s
  ...
}RecordingStreamクラスを使用した記録からイベント・ストリームを作成するには、次のステップを実行します:
- オプションで、Configurationクラスを使用して、事前定義済の構成(defaultまたはprofile)を指定します。
 - Configuration.getConfiguration()またはConfiguration.getConfiguration(Configuration)メソッドのいずれかを使用して、RecordingStreamインスタンスを作成します。
 - オプションで、
RecordingStream::enable(String)メソッドを使用して、イベント・ストリームに含めるイベントを有効化します。 - 
                     
                     
ストリーム内のイベントに実行するアクションを指定します。すべてのイベントに対して実行するアクションを指定するには、onEvent(Consumer<RecordedEvent>)メソッドを使用します。たとえば、次の文は、ストリーム内のすべてのイベント名を標準出力に出力します:
rs.onEvent(e -> { System.out.println(e.getEventType().getName()); });特定のイベントに実行するアクションを指定するには、onEvent(String, Consumer<RecordedEvent>)を使用します。たとえば、次の文は、名前がjdk.ThreadSleepに一致するイベントを出力します:rs.onEvent("jdk.ThreadSleep", System.out::println); - start()またはstartAsync()メソッドを使用してイベント・ストリームを開始します。このサンプルでは、バックグラウンド・スレッドでストリームを実行するstartAsync()が呼び出されます。start()メソッドを呼び出すと、アプリケーションでは、ストリームが閉じるまでこのメソッド呼出しは処理されません。