Java动态列出已分配的对象

时间:2016-09-14 14:55:06

标签: java object jvm runtime profiler

我正在寻找一种方法来查找JVM中已分配对象的列表。

我不想使用分析器,因为我希望在运行时,代码本身内部看到这些对象。我想创建一个程序内部所有对象的图形以及彼此之间的交互。

你有开始的方式吗?我已经搜索了很多反射类和分析器示例,但找不到与我的情况相关的东西。

提前谢谢

2 个答案:

答案 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,一个应用程序可以拥有数百万个对象,因此设计用于执行此操作的工具将帮助您导航数据。