RFR: 8351925: JFR: Microsecond time format precision for JFR tool

Aleksey Shipilev shade at openjdk.org
Mon Mar 31 11:07:19 UTC 2025


On Mon, 31 Mar 2025 10:55:30 GMT, Erik Gahlin <egahlin at openjdk.org> wrote:

> What is the primary friction you see in --json? The verbose stack traces, too much precision, or the need to specify a command-line flag?

JSON is too verbose for human consumption. I think this is mostly due to stack traces, but there are also other parts that are relatively noisy. So I cannot easily show the pair of events in a bug report / chat message to show a particular piece of JFR-captured info, without first truncating the output.

Compare the human-readable output for the same event:


jdk.JavaMonitorNotify {
  startTime = 19:09:11.996
  duration = 0.000602 ms
  monitorClass = java.lang.Object (classLoader = bootstrap)
  notifiedCount = 1
  address = 0x7C6F54001250
  eventThread = "main" (javaThreadId = 3)
  stackTrace = [
    java.lang.Object.notifyAll()
    NotifyWaitLatency.work() line: 22
    NotifyWaitLatency.main(String[]) line: 4
    jdk.internal.reflect.DirectMethodHandleAccessor.invoke(Object, Object[]) line: 104
    java.lang.reflect.Method.invoke(Object, Object[]) line: 565
  ] 
}


...and JSON one:


      "type": "jdk.JavaMonitorNotify", 
      "values": {
        "startTime": "2025-03-14T19:09:11.996604879+01:00", 
        "duration": "PT0.000000602S", 
        "eventThread": {
          "osName": "main", 
          "osThreadId": 963561, 
          "javaName": "main", 
          "javaThreadId": 3, 
          "group": {
            "parent": {
              "parent": null, 
              "name": "system"
            }, 
            "name": "main"
          }, 
          "virtual": false
        }, 
        "stackTrace": {
          "truncated": false, 
          "frames": [{
            "method": {
              "type": {
                "classLoader": {
                  "type": null, 
                  "name": "bootstrap"
                }, 
                "name": "java/lang/Object", 
                "package": {
                  "name": "java/lang", 
                  "module": {
                    "name": "java.base", 
                    "version": "25-internal", 
                    "location": "jrt:/java.base", 
                    "classLoader": {
                      "type": null, 
                      "name": "bootstrap"
                    }
                  }, 
                  "exported": true
                }, 
                "modifiers": 1, 
                "hidden": false
              }, 
              "name": "notifyAll", 
              "descriptor": "()V", 
              "modifiers": 273, 
              "hidden": false
            }, 
            "lineNumber": -1, 
            "bytecodeIndex": 0, 
            "type": "Native"
          }, {
            "method": {
              "type": {
                "classLoader": {
                  "type": {
                    "classLoader": {
                      "type": {
                        "classLoader": {
                          "type": null, 
                          "name": "bootstrap"
                        }, 
                        "name": "jdk/internal/loader/ClassLoaders$AppClassLoader", 
                        "package": {
                          "name": "jdk/internal/loader", 
                          "module": {
                            "name": "java.base", 
                            "version": "25-internal", 
                            "location": "jrt:/java.base", 
                            "classLoader": {
                              "type": null, 
                              "name": "bootstrap"
                            }
                          }, 
                          "exported": true
                        }, 
                        "modifiers": 10, 
                        "hidden": false
                      }, 
                      "name": "app"
                    }, 
                    "name": "com/sun/tools/javac/launcher/MemoryClassLoader", 
                    "package": {
                      "name": "com/sun/tools/javac/launcher", 
                      "module": {
                        "name": "jdk.compiler", 
                        "version": "25-internal", 
                        "location": "jrt:/jdk.compiler", 
                        "classLoader": {
                          "type": {
                            "classLoader": {
                              "type": null, 
                              "name": "bootstrap"
                            }, 
                            "name": "jdk/internal/loader/ClassLoaders$AppClassLoader", 
                            "package": {
                              "name": "jdk/internal/loader", 
                              "module": {
                                "name": "java.base", 
                                "version": "25-internal", 
                                "location": "jrt:/java.base", 
                                "classLoader": {
                                  "type": null, 
                                  "name": "bootstrap"
                                }
                              }, 
                              "exported": true
                            }, 
                            "modifiers": 10, 
                            "hidden": false
                          }, 
                          "name": "app"
                        }
                      }, 
                      "exported": false
                    }, 
                    "modifiers": 16, 
                    "hidden": false
                  }, 
                  "name": null
                }, 
                "name": "NotifyWaitLatency", 
                "package": null, 
                "modifiers": 1, 
                "hidden": false
              }, 
              "name": "work", 
              "descriptor": "()V", 
              "modifiers": 9, 
              "hidden": false
            }, 
            "lineNumber": 22, 
            "bytecodeIndex": 44, 
            "type": "Interpreted"
          }, {
            "method": {
              "type": {
                "classLoader": {
                  "type": {
                    "classLoader": {
                      "type": {
                        "classLoader": {
                          "type": null, 
                          "name": "bootstrap"
                        }, 
                        "name": "jdk/internal/loader/ClassLoaders$AppClassLoader", 
                        "package": {
                          "name": "jdk/internal/loader", 
                          "module": {
                            "name": "java.base", 
                            "version": "25-internal", 
                            "location": "jrt:/java.base", 
                            "classLoader": {
                              "type": null, 
                              "name": "bootstrap"
                            }
                          }, 
                          "exported": true
                        }, 
                        "modifiers": 10, 
                        "hidden": false
                      }, 
                      "name": "app"
                    }, 
                    "name": "com/sun/tools/javac/launcher/MemoryClassLoader", 
                    "package": {
                      "name": "com/sun/tools/javac/launcher", 
                      "module": {
                        "name": "jdk.compiler", 
                        "version": "25-internal", 
                        "location": "jrt:/jdk.compiler", 
                        "classLoader": {
                          "type": {
                            "classLoader": {
                              "type": null, 
                              "name": "bootstrap"
                            }, 
                            "name": "jdk/internal/loader/ClassLoaders$AppClassLoader", 
                            "package": {
                              "name": "jdk/internal/loader", 
                              "module": {
                                "name": "java.base", 
                                "version": "25-internal", 
                                "location": "jrt:/java.base", 
                                "classLoader": {
                                  "type": null, 
                                  "name": "bootstrap"
                                }
                              }, 
                              "exported": true
                            }, 
                            "modifiers": 10, 
                            "hidden": false
                          }, 
                          "name": "app"
                        }
                      }, 
                      "exported": false
                    }, 
                    "modifiers": 16, 
                    "hidden": false
                  }, 
                  "name": null
                }, 
                "name": "NotifyWaitLatency", 
                "package": null, 
                "modifiers": 1, 
                "hidden": false
              }, 
              "name": "main", 
              "descriptor": "([Ljava/lang/String;)V", 
              "modifiers": 137, 
              "hidden": false
            }, 
            "lineNumber": 4, 
            "bytecodeIndex": 8, 
            "type": "Interpreted"
          }, {
            "method": {
              "type": {
                "classLoader": null, 
                "name": "java.lang.invoke.LambdaForm$DMH/0x00007c6fe7001400", 
                "package": {
                  "name": "java/lang/invoke", 
                  "module": {
                    "name": "java.base", 
                    "version": "25-internal", 
                    "location": "jrt:/java.base", 
                    "classLoader": {
                      "type": null, 
                      "name": "bootstrap"
                    }
                  }, 
                  "exported": true
                }, 
                "modifiers": 16, 
                "hidden": true
              }, 
              "name": "invokeStatic", 
              "descriptor": "(Ljava/lang/Object;Ljava/lang/Object;)V", 
              "modifiers": 8, 
              "hidden": true
            }, 
            "lineNumber": -1, 
            "bytecodeIndex": 10, 
            "type": "Interpreted"
          }, {
            "method": {
              "type": {
                "classLoader": null, 
                "name": "java.lang.invoke.LambdaForm$MH/0x00007c6fe7191000", 
                "package": {
                  "name": "java/lang/invoke", 
                  "module": {
                    "name": "java.base", 
                    "version": "25-internal", 
                    "location": "jrt:/java.base", 
                    "classLoader": {
                      "type": null, 
                      "name": "bootstrap"
                    }
                  }, 
                  "exported": true
                }, 
                "modifiers": 16, 
                "hidden": true
              }, 
              "name": "invoke", 
              "descriptor": "(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", 
              "modifiers": 8, 
              "hidden": true
            }, 
            "lineNumber": -1, 
            "bytecodeIndex": 33, 
            "type": "Interpreted"
          }]
        }, 
        "monitorClass": {
          "classLoader": {
            "type": null, 
            "name": "bootstrap"
          }, 
          "name": "java/lang/Object", 
          "package": {
            "name": "java/lang", 
            "module": {
              "name": "java.base", 
              "version": "25-internal", 
              "location": "jrt:/java.base", 
              "classLoader": {
                "type": null, 
                "name": "bootstrap"
              }
            }, 
            "exported": true
          }, 
          "modifiers": 1, 
          "hidden": false
        }, 
        "notifiedCount": 1, 
        "address": 136817592504912
      }

-------------

PR Comment: https://git.openjdk.org/jdk/pull/24029#issuecomment-2765898065


More information about the hotspot-jfr-dev mailing list