Я исследую реализацию мониторинга JMX и хотел узнать, как сервер JMX MBean управляет памятью и когда он освобождает свои зарегистрированные mbeans.
Я создал тривиальный пример, поэкспериментировал с ним и заметил, что объекты не были освобождены, и я смог отправить их через JConsole спустя долгое время после включения сборщика мусора. Это наводит меня на мысль, что Существует огромный потенциал для утечек памяти при производстве, и может быть чрезмерно большой рост памяти. Например, здесь я создал 100 бинов и отправил их через 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) {}
}