我将在我室友的电脑上运行一个遗传算法整个周末,我担心它会在这么长时间内耗尽内存。但是,我的算法以这样一种方式工作,可以相当容易地修剪不太有用的结果,所以如果有一种方法可以判断我的程序何时将耗尽堆空间,我可能会腾出空间并继续再过一段时间。
有没有办法在 JVM 堆空间用完时,在 OutOfMemoryError 之前得到通知?
最佳答案
您可以注册一个 javax.management.NotificationListener,当达到某个阈值时调用它。
类似
final MemoryMXBean memBean = ManagementFactory.getMemoryMXBean();
final NotificationEmitter ne = (NotificationEmitter) memBean;
ne.addNotificationListener(listener, null, null);
final List<MemoryPoolMXBean> memPools = ManagementFactory
.getMemoryPoolMXBeans();
for (final MemoryPoolMXBean mp : memPools) {
if (mp.isUsageThresholdSupported()) {
final MemoryUsage mu = mp.getUsage();
final long max = mu.getMax();
final long alert = (max * threshold) / 100;
mp.setUsageThreshold(alert);
}
}
其中 listener 是您自己的 NotificationListener 实现。
关于java - Java 程序能否检测到它的堆空间不足?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9732439/