模块 jdk.jfr

包 jdk.jfr.consumer


jdk.jfr.consumer
此包包含用于使用 Flight Recorder 数据的类。

在以下示例中,程序打印记录中所有方法样本的直方图。

public static void main(String[] args) throws IOException {
  if (args.length != 1) {
    System.err.println("Must specify a recording file.");
    return;
  }

  RecordingFile.readAllEvents(Path.of(args[0])).stream()
    .filter(e -> e.getEventType().getName().equals("jdk.ExecutionSample"))
    .map(e -> e.getStackTrace())
    .filter(s -> s != null)
    .map(s -> s.getFrames().get(0))
    .filter(f -> f.isJavaFrame())
    .map(f -> f.getMethod())
    .collect(
      Collectors.groupingBy(m -> m.getType().getName() + "." + m.getName() + " " + m.getDescriptor(),
      Collectors.counting()))
    .entrySet()
    .stream()
    .sorted((a, b) -> b.getValue().compareTo(a.getValue()))
    .forEach(e -> System.out.printf("%8d %s\n", e.getValue(), e.getKey()));
}
 

空值处理

所有方法都在 Javadoc 中定义它们是接受还是返回 null。通常这表示为 "not null" 。如果在不允许的地方使用 null 参数,则会抛出 java.lang.NullPointerException。如果将 null 参数传递给抛出其他异常的方法,例如 java.io.IOException ,则 java.lang.NullPointerException 优先,除非该方法的 Javadoc 明确说明如何处理 null,即抛出 java.lang.IllegalArgumentException

自从:
9