概要
JVM Tool Interface:JVMTI 本质上是在JVM内部的许多事件进行了埋点。通过这些埋点可以给外部提供当前上下文的一些信息。甚至可以接受外部的命令来改变下一步的动作。
外部程序一般利用C/C++实现一个JVMTIAgent,在Agent里面注册一些JVM事件的回调。当事件发生时JVMTI调用这些回调方法。
Agent可以在回调方法里面实现自己的逻辑。JVMTIAgent是以动态链接库的形式被虚拟机加载的。
主要的功能:
- 重新定义类。
- 跟踪对象分配和垃圾回收过程。
- 遵循对象的引用树,遍历堆中的所有对象。
- 检查 Java 调用堆栈。
- 暂停(和恢复)所有线程。
运用
在Android中,内存溢出分析、大图检测、ANR监控都可以通过此中方式实现。