2013-02-15 69 views
0

我们正在研究客户在生产中部署的基于Java的产品。有一个要求,当Java堆内存达到特定的阈值时,我们应该在日志文件中转储一行。由于产品部署在客户现场进行生产,因此我们不能使用任何外部工具或配置文件。唯一的选择是从代码中以编程方式进行。我正在考虑实现一个会在间隔内休眠的线程,并调用Runtime.getRuntime()。freeMemory()并根据输出写入日志。但是,我想知道是否还有其他更好的方法/更好的API可供我们使用。从代码中监控内存使用情况

回答

2

我会自己使用MemoryMXBean。它甚至可以提供您所描述类别的通知(超过堆阈值)。

class MyListener implements javax.management.NotificationListener { 
    public void handleNotification(Notification notif, Object handback) { 
     // handle notification 
     .... 
    } 
} 

MemoryMXBean mbean = ManagementFactory.getMemoryMXBean(); 
NotificationEmitter emitter = (NotificationEmitter) mbean; 
MyListener listener = new MyListener(); 
emitter.addNotificationListener(listener, null, null); 
:此 样品代码是直接从抬起的Javadoc