【问题标题】:Taking dump of hashmap from memory, for a java process从内存中转储hashmap,用于java进程
【发布时间】:2012-02-25 17:33:10
【问题描述】:

我有一个已运行一周多的 Java 进程。在这个过程中,我一直在处理一些数据,并且一直在将一些中间结果存储到内存中的 hashmap 中。

现在,由于代码中的一些错误,我需要停止该进程。但是,如果我终止该进程,那么我会丢失 hashmap 中的数据 n 将不得不再次重新处理它,下次我运行代码时。

他们是我可以在内存中获取 hashmap 的转储 的方法吗?

【问题讨论】:

  • 唯一可行的方法是以某种方式将调试器附加到进程。这是否可以完成取决于您的 JVM 和用于启动它的选项。

标签: java memory memory-management ram


【解决方案1】:

您可以触发内存转储,您可以使用各种工具(例如分析器)读取该转储。这很难阅读,我从未听说有人使用它来重新启动程序。

重新启动程序不是事后才可以做的事情,它需要设计到您的应用程序中并经过全面测试。人们不必担心这个问题的一种方法是使用数据库。这是因为数据库经过专业设计和测试,可以在不丢失数据的情况下重新启动。

【讨论】:

    【解决方案2】:

    您可以使用 JConsole(包含在标准 JDK 中)或 visualvm 附加到已运行的进程并触发堆转储。

    但是,正如 Peter 所说,除非您能找到可以帮助您的工具,否则实际上阅读此转储文件不会很有趣。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-07
      • 2011-03-21
      • 2011-10-30
      • 2017-04-07
      • 2015-02-21
      • 2012-06-22
      • 2014-05-27
      • 1970-01-01
      相关资源
      最近更新 更多