Module jdk.jfr
Package jdk.jfr

Annotation Interface Period


@Retention(RUNTIME) @Inherited @Target(TYPE) public @interface Period
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();
}

Since:
9