【问题标题】:Is it necessary to unregister an MBean from the Platform MBean Server?是否需要从 Platform MBean Server 注销 MBean?
【发布时间】:2010-09-28 01:32:37
【问题描述】:

我已经开始使用 MBeans 来公开有关应用程序的一些信息。几乎所有的 HOWTO / 教程 / 博客文章 / 在线示例都教您如何实现 MBean 并将其注册到 MBean 服务器,但从不提及(或只是粗略地)从服务器中取消注册 MBean。

我担心 MBean 需要引用相当重量级的对象才能提供有关该对象的状态信息。

平台 MBean 服务器是否维护对 MBean 的弱引用或其他一些类似的技巧,以确保如果您的应用程序不再持有对它的任何引用,它最终会被 GC 处理?注销通常是不必要的,从而解释了为什么在 JMX 教程中没有人谈论它?

【问题讨论】:

    标签: java jmx mbeans


    【解决方案1】:

    您不能“弱”地向服务器注册 MBean(目前),从而期望在没有其他对它的引用时对它进行 GC。

    话虽如此,您绝对应该阅读 Eamonn McManus 关于该主题的一些帖子。

    https://web.archive.org/web/20120207140653/http://weblogs.java.net/blog/emcmanus/archive/2005/07/cleaning_up_an_1.html

    有人建议使用 JMX API 可能有一些明确的支持 像这样的“弱 MBean”。我不知道 他们有足够的用处来证明 将它们包含在 API 中,我是 也不确定什么是通用的 弱 MBean 的 API 看起来像。 但上面显示了如何创建 如果需要,您自己的弱 MBean。

    https://web.archive.org/web/20090114131740/http://weblogs.java.net/blog/emcmanus/archive/2005/07/javaone_feedbac.html

    “弱”MBean。一个 MBean 频繁 管理另一个 Java 对象,它是 要监控的“资源”或 受控。但如果唯一的 对该资源的引用来自 豆?我们能不能以某种方式安排 如果资源消失,MBean 不再被任何人引用 还有吗?

    打开和关闭昂贵的 MBean。 一些 MBean 可能会导出信息 连续采样并且 收集起来很贵。你不 必然希望那些 MBean 成为 一直在运行。临时解决方案 很容易,例如 setThreadContentionMonitoringEnabled 方法在 java.lang.management.ThreadMXBean。但 也许可以有一个更一般的 约定,例如 setDetailLevel(int) 方法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-11-14
      • 1970-01-01
      • 1970-01-01
      • 2012-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多