Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8250913

EventHandlerCreator embeds an unnecessary StringPool

XMLWordPrintable

    • Icon: Enhancement Enhancement
    • Resolution: Not an Issue
    • Icon: P4 P4
    • tbd
    • 11
    • hotspot
    • None
    • jfr

      for each event class, EventHandlerCreator creates new classes that extend EventHandler and are used by event class of JFR.

      These new classes have a write method to put event data to thread-local buffers, and SpringPools if the corresponding event classes have String field.

      The classes leverage EventWriter in its write method. In the write method, for String data, the classes use putString(String, StringPool) method of EventWriter class.

      The classes put their own SpringPool into this method as the second argument.
      However, in this putString method the StringPool object that is the second argument never be used. And the StringPool object never uses in the classes too.

      As a result, StringPools never be used anywhere.

      Following as Sample of Event class and EventHandler that extend by EventHandlerCreator.


      @Label("JfrEvent")
      public class JfrEvent extends Event {

          @Label("id")
          private int id;

          @Label("name")
          private String name;

          public int getId() {
              return id;
          }

          public void setId(int id) {
              this.id = id;
          }

          public String getName() {
              return name;
          }

          public void setName(String name) {
              this.name = name;
          }
      }


      public final class EventHandler1754_1595079330631-153352 extends EventHandler {
          private final StringPool stringPool3 = this.createStringFieldWriter();

          private EventHandler1754_1595079330631_153352(boolean registered, EventType eventType, EventControl eventControl) {
              super(registered, eventType, eventControl);
          }

          public void write(long startTime, long duration, int id, String name) {
              EventWriter eventWriter;
              try {
                  do {
                      eventWriter= EventWriter.getEventWriter();
                      if (!eventWriter.beginEvent(super.platformEventType)) {
                          break;
                      }
                      eventWriter.putLong(startTime);
                      eventWriter.putLong(duration);
                      eventWriter.putEventThread();
                      eventWriter.putStackTrace();
                      eventWriter.putInt(id);
                      eventWriter.putString(name, this.stringPool3);
                  } while(!eventWriter.endEvent());
              } catch (Throwable t) {
                  EventWriter eventWriter2 = EventWriter.getEventWriter();
                  if (eventWriter2 != null) {
                      eventWriter2.reset();
                  }
                  throw t;
              }
          }
      }

            cito Chihiro Ito
            cito Chihiro Ito
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated:
              Resolved: