JVM:为堆访问添加一个钩子

JVM: Add a hook to Heap Access

我希望对我的 Java 项目进行概要分析。为了获得结果,我想将 "hook" 添加到 JVM,以便每次发生堆访问时,都会调用 "hook" 并进行一些跟踪。我一直在调查 JVMTI 但这似乎并没有给我预期的结果。

我有几个问题:

谢谢。

I want to add a "hook" to the JVM so that every time a heap access occurs

你不能在 Java 中真正做到这一点,因为挂钩本身会访问堆和调用本身。即使您解决了这个问题,它也会使程序慢得不可思议。

你可以做的是使用调试界面在每条指令后设置断点,检查指令是否访问了堆。这可能比正常情况慢 10,000 倍。

另一种方法是使用 Instrumentation 来翻译字节码以跟踪每个内存访问。这可能只会慢几百倍。

要有效地执行您的建议,您可以使用 https://software.intel.com/en-us/articles/intel-performance-counter-monitorperf 等工具在 Linux 上使用了它。这需要深入了解您正在使用的处理器