是否可以读取正在运行的java应用程序的内存?

时间:2010-06-29 03:39:15

标签: java memory jvm

我想学习如何,或者它是否可能以编程方式与黑盒java应用程序交互(通过读取其数据)。以前有没有做过这类事的研究/工作?

我认为在JVM上运行会使事情变得非常复杂。

@anon:对任何JVM执行此操作都是相关的。您是否必须了解或控制JVM如何分配内存以从Java应用程序中提取数据?

5 个答案:

答案 0 :(得分:3)

您可以查看java.lang.instrument。只要您了解应用程序的类结构,它就可以让您修改已经运行的JVM中的方法,并且您可以编写一种允许您提取或插入足够数据以进行通信的方法(取决于方法)当然可以。)

答案 1 :(得分:1)

麦吉尔大学的Sable小组为Java世界做出了大量研究。

大部分工作都变得相当过时,但您可能会在EVolve项目中找到一些帮助,其目标是可视化面向对象的程序。他们的一些项目似乎得到了积极的维护(例如Soot,他们的Java优化框架),所以你可以找到直接联系他们的运气

答案 2 :(得分:1)

例如,StackTrace很容易实现。它可以附加到java进程,让您使用BeanShell检查和更改几乎所有内容。

答案 3 :(得分:0)

我相信你所寻找的是Eclipse MAT所做的。您可能想看一下源代码......

答案 4 :(得分:0)

HotSpot JVM允许您从分析器(请参阅Open Source Java Profilers或商业广告,如Your Kit)连接agentlib,然后在分析器中检查内存/ cpu /线程等。 如果你想要非常具体的东西,你可能想制作自己的agentlib,向你发送有关你需要的jvm的信息。