【发布时间】:2018-05-08 18:11:16
【问题描述】:
我正在研究实现 JMX 监控,我想知道 JMX MBean 服务器如何管理内存以及它何时释放其注册的 mbean。
我创建了一个简单的示例并正在使用它,并注意到对象没有被释放,并且我能够在垃圾收集器应该启动很久之后通过 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) {}
}
【问题讨论】:
标签: java scala garbage-collection jmx mbeans