是否有必要从Platform MBean Server取消注册MBean?

时间:2008-12-22 17:54:40

标签: java jmx mbeans

我已经开始使用MBean来展示有关应用的一些信息。几乎全部的HOWTOs / Tutorials / Blog帖子/样本在线教你如何实现MBean并将其注册到MBean Server,但从未提及(或只是轻微地)从服务器注销MBean。

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

Platform MBean Server是否维护对MBean的弱引用,或其他一些此类技巧,以确保如果您的应用程序不再持有任何引用,它最终会获得GC?取消注册通常是不必要的,从而解释为什么没有人在JMX教程中讨论它?

1 个答案:

答案 0 :(得分:5)

你不能“弱”地用服务器(还)注册一个MBean,因此当没有其他引用存在时,期望它被GCed。

话虽如此,你绝对应该阅读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

  

“弱”MBeans。一个MBean经常   管理另一个Java对象   要监控的“资源”或   受控。但如果唯一的话呢   对该资源的引用来自   MBean的?我们可以以某种方式安排   如果资源,MBean将消失   不再被任何人引用   别的?

     

打开和关闭昂贵的MBean。   一些MBean可能会导出信息   这是连续采样的   聚会很贵。你没有   必然要那些MBean   一直在运行。临时解决方案   很容易,例如   setThreadContentionMonitoringEnabled   方法   java.lang.management.ThreadMXBean。但   或许可能会有一个更普遍的   惯例,如a   setDetailLevel(int)方法。