脚本或程序,用于列出Java程序的内存中的变量名称和值(内存快照)

时间:2013-11-27 20:09:53

标签: java memory jvm

我有一个在JVM中运行的Java程序。我需要随时了解存储器中存储的变量。我需要列出他们的名字和价值观。可以使用任何语言或脚本编写此程序。

我使用JMAP和JHAT来获取堆转储并查看转储值。但它没有给出我想要的东西。

感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

YourKit是镇上最好的廓形之一,但价格相当昂贵。而且,虽然它们可能会为您提供免费试用期,但下次您需要对下一个项目进行类似测试时,这对您没有任何帮助。

我建议使用好的'ole JRE附带的东西:JVisualVM。它具有您正在寻找的所有功能(在运行时动态检查变量/对象),以及监视堆/线程活动,执行堆/线程转储和分析它们的能力,甚至还有自己的对象查询语言( OQL)基于特定条件的转储之外的查询对象值。

缺点是它引入了适度的性能开销,因此您只想在非生产环境中运行它。 (对于使用AppDynamicsNew Relic之类的低开销生产监控。 JVisualVM的性能开销是否会影响代码的运行速度?是的。 因为您将为每个测试用例运行它,所有测试用例都会受到同等影响。

因此,听起来您希望将此作为基本工作流程:

  1. 启动您的app / JVM
  2. 启动JVisualVM
  3. 使用JVisualVM
  4. 开始分析您的应用程序(“快照模式”)
  5. 运行下一个测试。
  6. 停止分析您的应用
  7. 执行堆和/或线程转储并将其保存在文件系统的某个位置
  8. 如果有更多测试,请返回#3。
  9. 否则停止您的应用
  10. 在JVisualVM中,逐个加载每个堆/线程转储,可能使用OQL来获取您要查找的对象/变量,并将每个测试用例的性能与其他人进行比较
  11. 祝你好运& HTH。