Top Description Fields Methods
jdk.jfr

public @Interface Period

extends Annotation
Annotations
@MetadataDefinition
@Retention:RUNTIME
@Inherited
@Target:TYPE
Imports
java.lang.annotation.ElementType, .Inherited, .Retention, .RetentionPolicy, .Target

Event annotation, specifies the default setting value for a periodic event.

The following example shows how the Period annotation can be used to emit events at different intervals.

@Period("1 s") @Name("Counter") class CountEvent extends Event { int count; } @Period("3 s") @Name("Fizz") class FizzEvent extends Event { } @Period("5 s") @Name("Buzz") class BuzzEvent extends Event { } var counter = new AtomicInteger(); FlightRecorder.addPeriodicEvent(CountEvent.class, () -> { CountEvent event = new CountEvent(); event.count = counter.incrementAndGet(); event.commit(); }); FlightRecorder.addPeriodicEvent(FizzEvent.class, () -> { new FizzEvent().commit(); }); FlightRecorder.addPeriodicEvent(BuzzEvent.class, () -> { new BuzzEvent().commit(); }); var sb = new StringBuilder(); var last = new AtomicInteger(); var current = new AtomicInteger(); try (var r = new RecordingStream()) { r.onEvent("Counter", e -> current.set(e.getValue("count"))); r.onEvent("Fizz", e -> sb.append("Fizz")); r.onEvent("Buzz", e -> sb.append("Buzz")); r.onFlush(() -> { if (current.get() != last.get()) { System.out.println(sb.isEmpty() ? current : sb); last.set(current.get()); sb.setLength(0); } }); r.start(); }
@Period("1 s")
@Name("Counter")
class CountEvent extends Event {
    int count;
}
@Period("3 s")
@Name("Fizz")
class FizzEvent extends Event {
}
@Period("5 s")
@Name("Buzz")
class BuzzEvent extends Event {
}

var counter = new AtomicInteger();
FlightRecorder.addPeriodicEvent(CountEvent.class, () -> {
    CountEvent event = new CountEvent();
    event.count = counter.incrementAndGet();
    event.commit();
});
FlightRecorder.addPeriodicEvent(FizzEvent.class, () -> {
    new FizzEvent().commit();
});
FlightRecorder.addPeriodicEvent(BuzzEvent.class, () -> {
    new BuzzEvent().commit();
});

var sb = new StringBuilder();
var last = new AtomicInteger();
var current = new AtomicInteger();
try (var r = new RecordingStream()) {
    r.onEvent("Counter", e -> current.set(e.getValue("count")));
    r.onEvent("Fizz", e -> sb.append("Fizz"));
    r.onEvent("Buzz", e -> sb.append("Buzz"));
    r.onFlush(() -> {
        if (current.get() != last.get()) {
            System.out.println(sb.isEmpty() ? current : sb);
            last.set(current.get());
            sb.setLength(0);
        }
    });
    r.start();
}
Since
9

Field Summary

Modifier and TypeField and Description
public static final String
NAME

Settings name "period" for configuring periodic events

Method Summary

Modifier and TypeMethod and Description
public String

Returns:

the default setting value, not null
value
()

Returns the default setting value for a periodic setting.

Inherited from java.lang.annotation.Annotation:
annotationTypeequalshashCodetoString

Field Detail

NAMEback to summary
public static final String NAME

Settings name "period" for configuring periodic events

Method Detail

valueback to summary
public String value()

Returns the default setting value for a periodic setting.

String representation of a positive Long value followed by an empty space and one of the following units:

"ns" (nanoseconds)
"us" (microseconds)
"ms" (milliseconds)
"s" (seconds)
"m" (minutes)
"h" (hours)
"d" (days)

Example values: "0 ns", "10 ms", and "1 s".

A period may also be "everyChunk" to specify that it occurs at least once for every recording file. The number of events that are emitted depends on how many times the file rotations occur when data is recorded.

Returns:String

the default setting value, not null