有没有办法从 Java 进程的堆转储中计算出(甚至近似)对象的创建时间?
请假设我无权访问代码并且我必须使用给定的转储。所以我不能把时间戳放在构造函数中。
最佳答案
我认为您无法从给定的转储中找到时间戳,但如果您可以创建新的转储,这里有一些建议。
如果您只需要非常粗略的时间分辨率,例如(启动后、5 分钟后、手动触发错误之前、手动触发错误之后等),那么您可以获取多个转储并进行比较。
否则,如果您能够添加代理并再次运行场景,您可以自行记录。在*$JAVA_HOME/demo/jvmti 目录* 中使用您的 JDK,有一个示例代理程序 heapTracker 可以跟踪对象创建删除。这可以很容易地修改为也包括时间戳。参见 Tools Interface
关于java - 堆转储中的对象创建时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8815489/