我正在寻找一种在 JVM 中查找已分配对象列表的方法。
我不想使用探查器,因为我想在运行时在代码本身内部查看这些对象。我想创建程序中存在的所有对象以及彼此之间的交互的图表。
你有办法开始吗?我已经搜索了很多反射类和分析器示例,但找不到与我的案例相关的内容。
提前致谢
最佳答案
您可以使用 JVMTI
实现此目的。 GetLoadedClasses
函数是一个很好的切入点
JavaVM *jvm;
jvmtiEnv *jvmti;
jvmtiError err;
env->GetJavaVM(&jvm);
jvm->GetEnv((void **) &jvmti, JVMTI_VERSION_1_2);
jint classCount = 0;
jclass * classes;
// get all classes loaded by jvm
jvmti->GetLoadedClasses(&classCount, &classes);
您也可以traverse heap从而构建对象图。
关于Java动态列出分配的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39493625/