7

アプリに関する情報を公開するために、MBean をいじり始めました。HOWTO / チュートリアル / ブログ投稿 / オンラインのサンプルのほとんどは、MBean を実装して MBean サーバーに登録する方法を教えてくれますが、サーバーから MBean を登録解除することについては決して (またはざっとだけ) 言及しません。

オブジェクトに関するステータス情報を提供するために、かなり重いオブジェクトへの参照が必要な MBean について懸念しています。

プラットフォーム MBean サーバーは、アプリケーションが MBean への参照を保持しなくなった場合に最終的に GC されるようにするために、MBean への弱い参照を維持していますか? 登録解除は一般的に不要なので、JMX チュートリアルで誰もそれについて話していない理由を説明していますか?

4

1 に答える 1

5

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 に含めることを正当化するのに十分な用途があるかどうかはわかりません。また、Weak MBean の汎用 API がどのようになるかもわかりません。ただし、上記は、必要に応じて独自の Weak 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 は、継続的にサンプリングされ、収集にコストがかかる情報をエクスポートする場合があります。これらの MBean を常に実行している必要はありません。アドホック ソリューションは簡単です。たとえば、java.lang.management.ThreadMXBean の setThreadContentionMonitoringEnabled メソッドです。しかし、おそらく setDetailLevel(int) メソッドなど、より一般的な規則が存在する可能性があります。

于 2008-12-26T21:36:31.527 に答える