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