java - JVM:添加一个堆访问钩子(Hook)

标签 java jvm jvmti openj9

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

我有几个问题:

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

谢谢。

最佳答案

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

您实际上无法在 Java 中执行此操作,因为钩子(Hook)本身会访问堆和 cal 本身。即使您解决了这个问题,程序也会变得极其缓慢。

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

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

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

关于java - JVM:添加一个堆访问钩子(Hook),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52469172/

相关文章:

java - 如何在 JVMTI 中获取完整的命令行?

带有 jvmti 的 java 代理在运行时加载,从内部卸载

java - 从 Java 客户端连接到 IBM MQ 失败,并显示 MQJE001 : Completion Code '2' , 原因 '2035'

java - 使用Tomcat和servlet时如何删除txt文件?

java - 从 Java 复制 HBase 中的表

hadoop - JVM 重用 MapReduce 2.0 YARN

java - JVMTI - 如何从回调中获取方法参数的值

java - 面向服务架构中如何应对Java多态性

java - 终结器如何与分代 GC 交互?

java - 使用 JConsole 等连接到卡住的 jvm