gpt4 book ai didi

java - 在 java 中保存任何对象创建时的堆栈跟踪,并在程序中的任何其他点使用它

转载 作者:行者123 更新时间:2023-12-03 08:36:56 26 4
gpt4 key购买 nike

出于调试目的,我想在创建对象时保存堆栈跟踪,并在程序中稍后引用/打印它。我尝试向 OpenJDK 本身的 Object 类添加一个字段,但如 here 中所述它将导致 OpenJDK 中的硬编码元素出现问题。

有人可以建议一种有效的方法来做到这一点吗?

最佳答案

如果对象很大或频繁,JFR 将对分配进行采样。默认情况下采样频率高达 150 次/秒。

JDK 16 或更高版本:

$ java -XX:StartFlightRecording:filename=exitdump.jfr MyApp
...
Stop the application
$ jfr print --events ObjectAllocationSample --stack-depth 64 exitdump.jfr

jdk.ObjectAllocationSample {
startTime = 12:00:19.826
objectClass = byte[] (classLoader = bootstrap)
weight = 23.1 kB
eventThread = "Image Animator 0" (javaThreadId = 33)
stackTrace = [
sun.awt.image.GifFrame.dispose() line: 723
sun.awt.image.GifImageDecoder.produceImage() line: 247
sun.awt.image.InputStreamImageSource.doFetch() line: 269
sun.awt.image.ImageFetcher.fetchloop() line: 212
sun.awt.image.ImageFetcher.run() line: 176
]
}
...

关于java - 在 java 中保存任何对象创建时的堆栈跟踪,并在程序中的任何其他点使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63657220/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com