我面临的情况是看不到某些方法调用not被记录在VisualVM应用。想找出原因并遇到这个回答SO https://stackoverflow.com/a/14025723/1527084。第三点提到了一个潜在的问题sampling方法(这是我看到的唯一启用的选项,可能是因为我正在进行远程分析)。它提到了关于安全点在代码中和安全点轮询通过代码本身。这些术语是什么意思?
Java 采样分析器工具的不准确问题及其与安全点的关系在评估 Java 分析器的准确性 (PLDI'10) http://plv.colorado.edu/papers/mytkowicz-pldi10.pdf.
本质上,Java 分析器在采样时可能会产生不准确的结果,因为采样发生在安全点期间。并且由于编译器可以修改安全点的出现,因此某些操作的执行方法可能永远不会被采样由探查器。因此,分析器计划记录代码样本(时间间隔已到),但必须等待安全点的出现。由于安全点是例如由编译器移动,理想采样的方法永远不会被观察到。
正如前面的答案已经解释的那样,安全点是代码中编译器中断执行以执行某些内部 VM 代码(例如 GC)的事件或位置。
The 安全点轮询是一种实现安全点或安全点触发器的方法。这意味着在正在执行的代码中,您会定期检查标志以查看是否需要安全点执行,如果是(由于例如 GC 触发),则线程被中断并执行安全点。参见例如GC 安全点(或安全点)和安全区域 http://xiao-feng.blogspot.com/2008/01/gc-safe-point-and-safe-region.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)