2008-12-22 29 views
7

Tôi đã bắt đầu chơi với MBeans để hiển thị một số thông tin về một ứng dụng. Khá nhiều tổng thể của HOWTO/Hướng dẫn/bài đăng trên blog/Mẫu trực tuyến dạy bạn cách triển khai MBean và đăng ký nó bằng Máy chủ MBean, nhưng không bao giờ đề cập đến (hoặc chỉ con trỏ) đăng ký MBean từ máy chủ.Có cần phải hủy đăng ký một MBean từ Máy chủ nền tảng MBean không?

Tôi quan tâm đến một MBean cần có tham chiếu đến đối tượng khá nặng để cung cấp thông tin trạng thái về đối tượng đó.

Nền tảng MBean Server có duy trì tham chiếu yếu với MBean hay một số mẹo khác để đảm bảo rằng nó cuối cùng được GC'ed nếu ứng dụng của bạn không còn chứa bất kỳ tham chiếu nào đến nó? Không đăng ký thường không cần thiết, do đó giải thích tại sao không ai nói về nó trong hướng dẫn JMX?

Trả lời

5

Bạn không thể "yếu" đăng ký một MBean với máy chủ (chưa), do đó mong đợi nó được GC khi không có tham chiếu khác cho nó tồn tại.

Điều này đang được nói, bạn chắc chắn nên đọc một số bài đăng của Eamonn McManus về chủ đề này.

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

Nó được gợi ý rằng API JMX có thể có một số hỗ trợ rõ ràng cho "MBeans Yếu" như thế này. Tôi không chắc chắn có đủ sử dụng để họ biện minh cho bao gồm chúng trong API và tôi là cũng không chắc chắn về một API mục đích chung dành cho MBeak yếu sẽ như thế nào. Nhưng ở trên cho thấy làm thế nào bạn có thể tạo ra MBeak yếu của riêng bạn nếu cần thiết.

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

"Yếu" MBeans. Một MBean thường xuyên quản lý một đối tượng Java khác là "tài nguyên" cần được theo dõi hoặc được kiểm soát. Nhưng điều gì sẽ xảy ra nếu tham chiếu duy nhất cho tài nguyên đó là từ MBean? Chúng ta có thể sắp xếp cho MBean biến mất nếu tài nguyên không còn được tham chiếu bởi bất kỳ ai khác không?

Bật và tắt MBeans đắt tiền. Một số MB có thể xuất thông tin được lấy mẫu liên tục và rất tốn kém để thu thập. Bạn không nhất thiết muốn các MBeans đó là chạy mọi lúc. Các giải pháp quảng cáo hoc thật dễ dàng, ví dụ như phương pháp setThreadContentionMonitoringEnabled trong java.lang.management.ThreadMXBean. Nhưng có lẽ có thể có quy ước chung hơn , chẳng hạn như phương thức setDetailLevel (int).

Các vấn đề liên quan