19 Create Event Stream in Process, Passive
The sample PassiveEventStreamSample.java starts a passive
        event stream with the method EventStream.openRepository().
        As with any event stream, a passive event stream listens for events; in this example, it
        listens for jdk.CPULoad events. However, what gets recorded is controlled
        by external means, for example, by the command-line option
            -XX:StartFlightRecording, the jcmd command JFR.start, or an API (for example, Recording::start()).
               
The sample PassiveEventStreamSample.java creates an event
            stream not with RecordingStream but with EventStream.openRepository(). An event stream requires a
            recording; this sample obtains it from the command-line option
                -XX:StartFlightRecording.
               
import java.util.concurrent.atomic.AtomicInteger;
import jdk.jfr.consumer.EventStream;
public class PassiveEventStreamSample {
    static int NUMBER_CPULOAD_EVENTS = 3;
    public static void main(String... args) throws Exception {
        AtomicInteger timer = new AtomicInteger();
        try (EventStream es = EventStream.openRepository()) {
            es.onEvent("jdk.CPULoad", event -> {
                System.out.println("CPU Load " + event.getEndTime());
                System.out.println(" Machine total: "
                    + 100 * event.getFloat("machineTotal") + "%");
                System.out.println(
                    " JVM User: " + 100 * event.getFloat("jvmUser") +
                    "%");
                System.out.println(
                    " JVM System: " + 100 * event.getFloat("jvmSystem") +
                    "%");
                System.out.println();
                if (timer.incrementAndGet() == NUMBER_CPULOAD_EVENTS) {
                    System.exit(0);
                }
            });
            es.start();
        }
    }
}Run PassiveEventStreamSample with the following command:
               
java -XX:StartFlightRecording PassiveEventStreamSample.javaIt prints output similar to the following:
Started recording 1. No limit specified, using maxsize=250MB as default.
Use jcmd 12352 JFR.dump name=1 filename=FILEPATH to copy recording data to file.
CPU Load 2020-01-24T05:34:36.265584686Z
 Machine total: 19.3799%
 JVM User: 5.2175264%
 JVM System: 1.8634024%
CPU Load 2020-01-24T05:34:37.310049859Z
 Machine total: 5.2533073%
 JVM User: 0.0%
 JVM System: 0.3899041%
CPU Load 2020-01-24T05:34:38.373796070Z
 Machine total: 7.242967%
 JVM User: 0.0%
 JVM System: 1.1451485%