- すべての実装されたインタフェース:
AutoCloseable
,EventStream
次の例では、デフォルトの構成を使用してイベントを記録し、ガベージ・コレクション、CPUロードおよびJVM情報イベントを標準出力に出力する方法を示します。
Configuration c = Configuration.getConfiguration("default"); try (var rs = new RecordingStream(c)) { rs.onEvent("jdk.GarbageCollection", System.out::println); rs.onEvent("jdk.CPULoad", System.out::println); rs.onEvent("jdk.JVMInformation", System.out::println); rs.start(); }
- 導入されたバージョン:
- 14
-
コンストラクタのサマリー
コンストラクタ説明現在のJVM (Java Virtual Machine)のイベント・ストリームを作成します。RecordingStream(Configuration configuration)
構成の設定を使用してレコーディング・ストリームを作成します。 -
メソッドのサマリー
修飾子と型メソッド説明void
すべてのアクションが完了するか、ストリームがクローズされるか、現在のスレッドが中断されるまで、いずれか早いほうで発生します。void
awaitTermination(Duration timeout)
すべてのアクションが完了するか、ストリームがクローズされるか、タイムアウトが発生するか、現在のスレッドが中断されるまで、いずれか先に発生するまでブロックします。void
close()
このリソースを閉じ、ベースとなるリソースをすべて解放します。イベントを無効にします。指定された名前のイベントを無効にします。イベントを有効にします。指定された名前のイベントを有効にします。void
ストリームが閉じられたときに実行するアクションを登録します。void
例外が発生した場合に実行するアクションを登録します。void
onEvent(String eventName, Consumer<RecordedEvent> action)
名前と一致するすべてのイベントに対して実行するアクションを登録します。void
onEvent(Consumer<RecordedEvent> action)
ストリーム内のすべてのイベントで実行するアクションを登録します。void
ストリームのフラッシュ後に実行するアクションを登録します。boolean
アクションを登録解除します。void
setEndTime(Instant endTime)
ストリームの終了時間を指定します。void
ストリームで保持される過去のデータの量を決定します。void
setMaxSize(long maxSize)
ストリーム用に保持されるデータ量を決定します。void
setOrdered(boolean ordered)
イベントがストリームにコミットされた時間でソートされて、時系列順にイベントが到着することを指定します。void
setReuse(boolean reuse)
EventStream.onEvent(Consumer)
処理のイベント・オブジェクトを再利用できることを指定します。void
setSettings(Map<String,String> settings)
このレコーディング・ストリームのすべての設定を置換します。void
setStartTime(Instant startTime)
ストリームの開始時間を指定します。void
start()
アクションの処理を開始します。void
アクションの非同期処理を開始します。クラス java.lang.Objectで宣言されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
インタフェースjdk.jfr.consumer.EventStreamで宣言されたメソッド
onMetadata
-
コンストラクタの詳細
-
RecordingStream
public RecordingStream()現在のJVM (Java Virtual Machine)のイベント・ストリームを作成します。- 例外:
IllegalStateException
- flight Recorderを(たとえば、Java Virtual Machine (JVM)にFlight Recorderのサポートがない場合や、ファイル・リポジトリを作成したり、アクセスできない場合などです。)の作成できないかSecurityException
- セキュリティ・マネージャが存在し、呼び出し元にFlightRecorderPermission("accessFlightRecorder")
がない場合
-
RecordingStream
public RecordingStream(Configuration configuration)構成の設定を使用してレコーディング・ストリームを作成します。次の例では、事前定義された構成を使用するレコーディング・ストリームの作成方法を示します。
var c = Configuration.getConfiguration("default"); try (var rs = new RecordingStream(c)) { rs.onEvent(System.out::println); rs.start(); }
- パラメータ:
configuration
-null
ではなく、使用する設定が含まれている構成- 例外:
IllegalStateException
- flight Recorderを(たとえば、Java Virtual Machine (JVM)にFlight Recorderのサポートがない場合や、ファイル・リポジトリを作成したり、アクセスできない場合などです。)の作成できないかSecurityException
- セキュリティ・マネージャが使用され、FlightRecorderPermission "accessFlightRecorder"が設定されていない場合。- 関連項目:
Configuration
-
-
メソッドの詳細
-
enable
public EventSettings enable(String name)指定された名前のイベントを有効にします。複数のイベントの名前が(たとえば、同じクラスが別のクラス・ローダーにロードされたとします。)である場合、名前と一致するすべてのイベントが有効になります。 特定のクラスを有効にするには、イベント・タイプIDの
enable(Class)
メソッドまたはString
表現を使用します。- パラメータ:
name
-null
ではなく、イベントの設定- 戻り値:
null
ではなく、さらなる構成のためのイベント設定- 関連項目:
EventType
-
setSettings
このレコーディング・ストリームのすべての設定を置換します。次の例では、"default"構成を使用して20秒記録し、その設定を"profile"構成に変更します。
Configuration defaultConfiguration = Configuration.getConfiguration("default"); Configuration profileConfiguration = Configuration.getConfiguration("profile"); try (var rs = new RecordingStream(defaultConfiguration)) { rs.onEvent(System.out::println); rs.startAsync(); Thread.sleep(20_000); rs.setSettings(profileConfiguration.getSettings()); Thread.sleep(20_000); }
- パラメータ:
settings
-null
ではなく、設定する設定- 関連項目:
Recording.setSettings(Map)
-
enable
public EventSettings enable(Class<? extends Event> eventClass)イベントを有効にします。- パラメータ:
eventClass
-null
ではなく、有効にするイベント- 戻り値:
null
ではなく、さらなる構成のためのイベント設定- 例外:
IllegalArgumentException
-eventClass
が抽象クラスであるか、Event
のサブクラスでない場合
-
disable
public EventSettings disable(String name)指定された名前のイベントを無効にします。(たとえば、同じクラスが別のクラス・ローダーにロードされたとします。)と同じ名前のイベントが複数ある場合、名前と一致するすべてのイベントが無効化されます。 特定のクラスを無効にするには、イベント・タイプIDの
disable(Class)
メソッドまたはString
表現を使用します。- パラメータ:
name
-null
ではなく、イベントの設定- 戻り値:
null
ではなく、さらなる構成のためのイベント設定
-
disable
public EventSettings disable(Class<? extends Event> eventClass)イベントを無効にします。- パラメータ:
eventClass
-null
ではなく、有効にするイベント- 戻り値:
null
ではなく、さらなる構成のためのイベント設定- 例外:
IllegalArgumentException
-eventClass
が抽象クラスであるか、Event
のサブクラスでない場合
-
setMaxAge
public void setMaxAge(Duration maxAge)ストリームで保持される過去のデータの量を決定します。ディスクに格納されるデータのレコーディング量を制御するために、データを保持する最大時間を指定できます。 指定した時間よりも古いディスクに格納されているデータは、Java Virtual Machine (JVM)によって削除されます。
最大制限または最大保持時間をどちらも設定しない場合、イベントが発生したときに、レコーディングのサイズが無期限に大きくなる可能性があります
- パラメータ:
maxAge
- データが保持される時間の長さ(無限大の場合はnull
)。- 例外:
IllegalArgumentException
-maxAge
が負の場合IllegalStateException
- レコーディングがCLOSED
状態にあるかどうか
-
setMaxSize
public void setMaxSize(long maxSize)ストリーム用に保持されるデータ量を決定します。ディスクに格納されるデータのレコーディング量を制御するために、保持するデータの最大量を指定できます。 上限を超えた場合、Java Virtual Machine (JVM)は最も古いチャンクを削除し、新しいチャンクのための余裕を作成します。
最大限度または最大経過時間を設定しないと、レコーディングのサイズが無期限に拡大することがあります。
サイズはバイト単位で測定されます。
- パラメータ:
maxSize
- 保存するデータの量(無限大の場合は0
)- 例外:
IllegalArgumentException
-maxSize
が負の場合IllegalStateException
- レコーディングがCLOSED
状態にある場合
-
setReuse
public void setReuse(boolean reuse)インタフェース:EventStream
からコピーされた説明EventStream.onEvent(Consumer)
処理のイベント・オブジェクトを再利用できることを指定します。reuseが
true
に設定されている場合、アクションの完了後、アクションはイベント・オブジェクトへの参照を保持しません。- 定義:
- インタフェース
EventStream
内のsetReuse
- パラメータ:
reuse
- イベント・オブジェクトを再利用できる場合はtrue
、それ以外の場合はfalse
-
setOrdered
public void setOrdered(boolean ordered)インタフェース:EventStream
からコピーされた説明イベントがストリームにコミットされた時間でソートされて、時系列順にイベントが到着することを指定します。- 定義:
- インタフェース
EventStream
内のsetOrdered
- パラメータ:
ordered
- イベント・オブジェクトがEventStream.onEvent(Consumer)
に時系列で到着した場合
-
setStartTime
public void setStartTime(Instant startTime)インタフェース:EventStream
からコピーされた説明ストリームの開始時間を指定します。開始時間は、ストリームの開始前に設定する必要があります
- 定義:
- インタフェース
EventStream
内のsetStartTime
- パラメータ:
startTime
- 開始時間(null
ではない)- 関連項目:
EventStream.start()
,EventStream.startAsync()
-
setEndTime
public void setEndTime(Instant endTime)インタフェース:EventStream
からコピーされた説明ストリームの終了時間を指定します。終了時間は、ストリームの開始前に設定する必要があります。
最後に、ストリームはクローズされます。
- 定義:
- インタフェース
EventStream
内のsetEndTime
- パラメータ:
endTime
- 終了時間(null
ではない)- 関連項目:
EventStream.start()
,EventStream.startAsync()
-
onEvent
public void onEvent(String eventName, Consumer<RecordedEvent> action)インタフェース:EventStream
からコピーされた説明名前と一致するすべてのイベントに対して実行するアクションを登録します。- 定義:
- インタフェース
EventStream
内のonEvent
- パラメータ:
eventName
- イベントの名前(null
以外)action
-null
ではなく、イベント名と一致する各RecordedEvent
に対して実行するアクション
-
onEvent
public void onEvent(Consumer<RecordedEvent> action)インタフェース:EventStream
からコピーされた説明ストリーム内のすべてのイベントで実行するアクションを登録します。- 定義:
- インタフェース
EventStream
内のonEvent
- パラメータ:
action
-null
ではなく、各RecordedEvent
で実行するアクション。
-
onFlush
public void onFlush(Runnable action)インタフェース:EventStream
からコピーされた説明ストリームのフラッシュ後に実行するアクションを登録します。- 定義:
- インタフェース
EventStream
内のonFlush
- パラメータ:
action
- ストリームのフラッシュ後に実行するアクション。null
ではありません
-
onClose
public void onClose(Runnable action)インタフェース:EventStream
からコピーされた説明ストリームが閉じられたときに実行するアクションを登録します。ストリームがすでにクローズされている場合は、現在のスレッド内でただちにアクションが実行されます。
- 定義:
- インタフェース
EventStream
内のonClose
- パラメータ:
action
- ストリームが閉じられた後に実行するアクション。null
はクローズされません- 関連項目:
EventStream.close()
-
onError
インタフェース:EventStream
からコピーされた説明例外が発生した場合に実行するアクションを登録します。アクションが登録されていない場合は、例外スタック・トレースが標準エラーに出力されます。
アクションを登録すると、デフォルトの動作がオーバーライドされます。 複数のアクションが登録されている場合は、登録順に実行されます。
このメソッド自体が例外をスローすると、結果として生じる動作は未定義です。
- 定義:
- インタフェース
EventStream
内のonError
- パラメータ:
action
-null
ではなく例外が発生した場合に実行するアクション
-
close
public void close()インタフェース:AutoCloseable
からコピーされた説明このリソースを閉じ、ベースとなるリソースをすべて解放します。 このメソッドは、try
-with-resources文で管理されているオブジェクトで自動的に呼び出されます。このインタフェース・メソッドは
Exception
をスローするように宣言されていますが、実装者には、close
メソッドの具象実装を宣言する際に、より具体的な例外をスローするか、またはクローズ処理で失敗できない場合は例外を一切スローしないことを強くお薦めします。クローズ操作が失敗する可能のあるケースでは、実装者は細心の注意を払う必要があります。 例外をスローする前に、ベースとなるリソースを解放し、リソースをクローズ済みとして内部的にマークすることを強くお薦めします。
close
メソッドが複数回呼び出される可能性は低いため、これによってリソースはタイムリに解放されるようになります。 さらに、リソースが別のリソースをラップするか、別のリソースによってラップされるときに発生する可能性のある問題も減少します。このインタフェースの実装者には、
close
メソッドからInterruptedException
がスローされないようにすることも強くお薦めします。 この例外はスレッドの割込みステータスと相互に作用するので、InterruptedException
が抑制されるとおそらく実行時の誤動作が発生します。 より一般的には、ある例外を抑制すると問題が発生する場合、AutoCloseable.close
メソッドはその例外をスローすべきではありません。Closeable
のclose
メソッドと異なり、このclose
メソッドはべき等である必要はありません。 つまり、このclose
メソッドを複数回呼び出すと何らかの副作用が発生する可能性がありますが、これは、複数回呼び出されても副作用がないことが要求されるCloseable.close
と異なります。 ただし、このインタフェースの実装者には、自身のclose
メソッドをべき等にすることを強くお薦めします。- 定義:
close
、インタフェース:AutoCloseable
- 定義:
- インタフェース
EventStream
内のclose
-
remove
public boolean remove(Object action)インタフェース:EventStream
からコピーされた説明アクションを登録解除します。アクションが複数回登録されている場合、すべてのインスタンスが登録解除されます。
- 定義:
- インタフェース
EventStream
内のremove
- パラメータ:
action
- 登録解除する処理(null
ではない)- 戻り値:
- アクションが登録解除された場合は
true
、登録されていない場合はfalse
- 関連項目:
EventStream.onEvent(Consumer)
,EventStream.onEvent(String, Consumer)
,EventStream.onFlush(Runnable)
,EventStream.onClose(Runnable)
,EventStream.onError(Consumer)
-
start
public void start()インタフェース:EventStream
からコピーされた説明- 定義:
- インタフェース
EventStream
内のstart
-
startAsync
public void startAsync()アクションの非同期処理を開始します。アクションは、単一の独立したスレッドで実行されます。
ストリームを停止するには、
close()
メソッドを使用します。次の例では、CPU使用率を10秒間出力します。 現在のスレッドがtry-with-resourcesブロックから離れると、ストリームは停止/クローズされます。
try (var stream = new RecordingStream()) { stream.enable("jdk.CPULoad").withPeriod(Duration.ofSeconds(1)); stream.onEvent("jdk.CPULoad", event -> { System.out.println(event); }); stream.startAsync(); Thread.sleep(10_000); }
- 定義:
- インタフェース
EventStream
内のstartAsync
- 例外:
IllegalStateException
- ストリームがすでに開始されているか、閉じている場合
-
awaitTermination
public void awaitTermination(Duration timeout) throws InterruptedExceptionインタフェース:EventStream
からコピーされた説明すべてのアクションが完了するか、ストリームがクローズされるか、タイムアウトが発生するか、現在のスレッドが中断されるまで、いずれか先に発生するまでブロックします。- 定義:
- インタフェース
EventStream
内のawaitTermination
- パラメータ:
timeout
-null
ではなく最大待機時間- 例外:
InterruptedException
- 待機中に割込みが発生した場合- 関連項目:
EventStream.start()
,EventStream.startAsync()
,Thread.interrupt()
-
awaitTermination
public void awaitTermination() throws InterruptedExceptionインタフェース:EventStream
からコピーされた説明すべてのアクションが完了するか、ストリームがクローズされるか、現在のスレッドが中断されるまで、いずれか早いほうで発生します。- 定義:
- インタフェース
EventStream
内のawaitTermination
- 例外:
InterruptedException
- 待機中に割込みが発生した場合- 関連項目:
EventStream.start()
,EventStream.startAsync()
,Thread.interrupt()
-