【发布时间】:2021-07-13 07:25:55
【问题描述】:
这是this one的后续问题
因此,我不断从“程序化访问”的角度探索现代分析器的功能,但我发现了一些超出我理解的东西。
这次我偶然发现了 JProfiler 中的“分配调用树”功能:
我确实看到,为了获得这种信息,我必须默认以 1/10 的速率触发采样分配,然后指定(最好)将记录分配的分类的包。
第 1 步
第 2 步
但是我真的不明白如何才能将有关调用堆栈的信息与有关分配对象的信息“匹配”。
当然我的问题不是关于JProfiler的实现细节,我理解它是一个商业工具,代码很紧凑,什么都有,而是关于如何检索这种信息的一般理解。
我最初的猜测是它以某种方式“检测”已经加载的类文件以“拦截”这些对象的每个分配(采样率不会过多地减慢过程)但是然后呢?它是否调用类似Thread.currentThread().getStackTrace() 并记录导致分配的实际堆栈跟踪?
另一方面,它在“采样模式”下激活(与仪器相反)+ 存在性能问题 - 这对我来说听起来是一件非常昂贵的事情(阅读,不应该在生产中使用) ,但我可能是错的,所以任何建议将不胜感激。
【问题讨论】:
标签: java jvm profiling heap-memory profiler