如何从正在运行的应用程序的堆转储中提取java类定义?

从堆转储中提取类定义的需要来自动态加载某些类的方式,而不是来自静态lib jar,而是动态编译或通过网络加载.堆转储具有与实际堆相同的大小,因此我假设所有类都在那里,可能在permgen中.目标是以.class文件的形式提取定义以供进一步检查. 最佳答案 似乎没有任何工具可以让您从VM中检索类位,更不用说从堆转储中检索.也不清楚类定义是否以与VM中.class的内容完全相同的格式提供.

但是在将类定义加载到VM之前,有多种选项可用于保存类定义.您可以拥有一个可以在堆或外部存储中存储类定义的代理.这也应该可以使用自定义类加载器,但有可能被其他客户类加载器绕过.

流行的AOP工具AspectJ可以选择保存检测类的定义;它可能可以用于你的用例.

点赞