我希望对我的 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/