我正在寻找一种方法来查找JVM中已分配对象的列表。
我不想使用分析器,因为我希望在运行时,代码本身内部看到这些对象。我想创建一个程序内部所有对象的图形以及彼此之间的交互。
你有开始的方式吗?我已经搜索了很多反射类和分析器示例,但找不到与我的情况相关的东西。
提前谢谢
答案 0 :(得分:3)
您可以使用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,从而构建对象图。
答案 1 :(得分:1)
你有开始的方式吗?
是的,您可以进行堆转储并分析堆转储。
注意:使用已经存在的堆分析器是最简单的。例如visualvm,一个应用程序可以拥有数百万个对象,因此设计用于执行此操作的工具将帮助您导航数据。