簡體   English   中英

是否有必要從Platform MBean Server取消注冊MBean?

[英]Is it necessary to unregister an MBean from the Platform MBean Server?

我已經開始使用MBean來公開有關應用程序的一些信息。 幾乎全部的HOWTOs / Tutorials / Blog帖子/樣本在線教你如何實現MBean並將其注冊到MBean Server,但從未提及(或只是游說)從服務器取消注冊MBean。

我擔心MBean需要引用一個相當重量級的對象才能提供有關該對象的狀態信息。

Platform MBean Server是否維護對MBean的弱引用,或其他一些此類技巧,以確保如果您的應用程序不再持有任何引用,它最終會獲得GC? 注銷通常是不必要的,從而解釋為什么沒有人在JMX教程中討論它?

您不能“弱”地向服務器(尚未)注冊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中是合理的,而且我也不確定Weak MBeans的通用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始終在運行。 臨時解決方案很簡單,例如java.lang.management.ThreadMXBean中的setThreadContentionMonitoringEnabled方法。 但也許可能有更通用的約定,例如setDetailLevel(int)方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM