我正在研究实现JMX监控,我想知道JMX MBean服务器如何管理内存以及何时发布其注册的mbeans。
我已经创建了一个简单的例子并且正在玩它并注意到对象没有被释放,并且我能够在垃圾收集器应该踢入之后很久就通过JConsole发送消息。这让我相信生产中存在内存泄漏的巨大潜力,并且内存增长可能非常不稳定。例如,我在这里创建了100个bean,并通过JConsole发送消息:
trait OrderTrackerMBean {
def getOrderId : Int
def setOrderId(orderId:Int)
}
class OrderTracker extends OrderTrackerMBean {
var orderId = 0
override def getOrderId: Int = orderId
override def setOrderId(_orderId: Int)= {
println(s"setting order id ${_orderId}")
orderId = _orderId
}
}
object TestJMX extends App {
val s: MBeanServer = ManagementFactory.getPlatformMBeanServer
0 to 100 map {
x =>
val objectName: ObjectName = new ObjectName(s"a.b.c.$x:type=basic,name=game")
val orderTrackerBean = new OrderTracker
s.registerMBean(orderTrackerBean ,objectName)
}
while(true) {}
}
答案 0 :(得分:0)
您正在创建100个Mbean对象,它将在JVM的生命周期中生效。它仍将被引用,因此在垃圾回收期间不会收集它。