0

我希望对我的 Java 项目进行分析。为了获得结果,我想向 JVM 添加一个“钩子”,以便每次发生堆访问时,都会调用“钩子”并进行一些跟踪。我一直在研究JVMTI,但这似乎并没有给我我所期望的。

我有几个问题:

  • 是否可以添加这样的钩子?
  • 如果可能,我应该使用哪些正确的工具/界面?
  • 如果没有执行此操作的现有工具,我可以通过修改 JVM 代码库来实现吗?

谢谢。

4

1 回答 1

2

我想为 JVM 添加一个“钩子”,以便每次发生堆访问时

您不能在 Java 中真正做到这一点,因为钩子本身会访问堆和 cal 本身。即使您解决了这个问题,它也会使程序变得非常慢。

您可以做的是在每条指令后使用调试接口断点,检查指令并查看它是否访问了堆。这可能比正常情况慢 10,000 倍。

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

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

于 2018-09-23T19:05:03.477 回答