6 Data Types

The example PersistFieldTypesSample.java shows which field types you can persist in an event, which are the following:

  • java.lang.String, which may be null
  • java.lang.Thread, which may be null
  • java.lang.Class, which may be null
  • byte
  • short
  • int
  • long
  • float
  • double
  • char
  • boolean

Note:

Events don't support arrays.

The following is the PersistFieldTypesSample.java example:

import jdk.jfr.Event;
import jdk.jfr.Label;
import jdk.jfr.Name;

public class PersistFieldTypesSample {

    @Name("com.oracle.FieldTypes")
    @Label("Allowed Field Types")
    static class FieldTypes extends Event {
        @Label("Class Value")
        Class<?> classValue;

        @Label("Thread Value")
        Thread threadValue; // thread must be started

        @Label("String Value")
        String stringValue;

        @Label("Byte Value")
        byte byteValue;

        @Label("Short Value")
        short shortValue;

        @Label("Int Value")
        int intValue;

        @Label("Long Value")
        long longValue;

        @Label("Float Value")
        float floatValue;

        @Label("Double Value")
        double doubleValue;

        @Label("Character Value")
        char characterValue;

        @Label("Boolean Value")
        boolean booleanValue;
    }

    public static void main(String... args) {
        FieldTypes event = new FieldTypes();
        event.classValue = Math.class;
        event.threadValue = Thread.currentThread();
        event.stringValue = "Hello";
        event.byteValue = 42;
        event.shortValue = 4711;
        event.intValue = Integer.MAX_VALUE;
        event.longValue = Long.MAX_VALUE;
        event.doubleValue = Math.PI;
        event.floatValue = Float.NaN;
        event.characterValue = '!';
        event.booleanValue = true;
        event.commit();
    }
}

Run PersistFieldTypesSample with the following commands:

java -XX:StartFlightRecording:filename=pft.jfr PersistFieldTypesSample.java
jfr print --events FieldTypes pft.jfr

The last command prints output similar to the following:

com.oracle.FieldTypes {
  startTime = 12:33:12.434
  classValue = java.lang.Math (classLoader = bootstrap)
  threadValue = "main" (javaThreadId = 1)
  stringValue = "Hello"
  byteValue = 42
  shortValue = 4711
  intValue = 2147483647
  longValue = 9223372036854775807
  floatValue = N/A
  doubleValue = 3.141592653589793
  characterValue = !
  booleanValue = true
  ...
}