gpt4 book ai didi

memory - 从java运行时环境(虚拟机)内存中获取实时变量?

转载 作者:行者123 更新时间:2023-12-02 08:34:30 26 4
gpt4 key购买 nike

假设我的系统上运行着几个 java 运行时环境,它们被多个应用程序使用。我想通过读取这些应用程序的内存以编程方式与它们交互。

一种典型的方法是直接查看该应用程序的内存,但是对于 java 应用程序来说,由于 java 运行时环境的原因,这实际上似乎是不可能的。相反,我们必须查看 java 运行时环境的内存,或者对其进行调试。

[以上是我在网上多次搜索所得,如有错误,请指正]

注意:请记住,我想要监控的应用程序不属于我所有,因此我没有源代码,也没有能力以“ Debug模式”或其他模式启动应用程序。

现在,由于这是一个非生产项目,我更喜欢一种简单的方法:使用现有的 Windows GUI 应用程序,该应用程序已经可以监视 java 运行时环境的变量,并且它的应用程序以编程方式从该 GUI 应用程序中抓取这些变量在我自己的项目中的使用。如果存在这样的程序,我将非常感谢您的帮助。

如果上述不可能,我将如何(以编程方式)检索这些变量?

最佳答案

如果不了解更多有关所涉及的应用程序及其结构等的信息,就很难准确回答这个问题。请注意,对象在 JVM 内存中移动,因此您无法直接监视实际的应用程序内存。

所以第一个问题是,如果没有源代码,您如何知道您想要监视什么?例如哪些变量/对象等?

既然您已经解决了这个问题,我觉得您有两个选择。

  1. 反编译并检测应用程序(可能是静态的,可能是使用 AOP),然后重新编译它。这假设应用程序没有被混淆,并且您没有违反许可等。
  2. 将应用程序包装在一个薄层中,该薄层使用反射来识别您感兴趣的变量,并在流程执行时跟踪这些变量的值。我怀疑您仍然需要反编译才能识别这些变量。

您可以通过创建 MBean 并通过 JMX 公开来远程监控这些值。 ,并通过 JConsole 进行监控。与查找您感兴趣的变量的初始步骤相比,这非常简单。

关于memory - 从java运行时环境(虚拟机)内存中获取实时变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2350905/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com