java - Java 程序能否检测到它的堆空间不足?

标签 java memory

我将在我室友的电脑上运行一个遗传算法整个周末,我担心它会在这么长时间内耗尽内存。但是,我的算法以这样一种方式工作,可以相当容易地修剪不太有用的结果,所以如果有一种方法可以判断我的程序何时将耗尽堆空间,我可能会腾出空间并继续再过一段时间。

有没有办法在 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/

相关文章:

java - 如何将 stanford coreNLP 服务器部署到在线 Web 服务,例如赫鲁库?

c - 读取简单 CSV 文件时出现段错误 - C

c - realloc 指针指向随机内存,导致程序崩溃

ubuntu - JMeter - Linux 内存不足

java - Domino 中的 FTSearch 不适用于 Domino 851 服务器,但它适用于 Domino 8

java - 扩展 ByteArrayOutputStream 时 eclipse 中的资源泄漏警告

java - 在 gradle 中运行单个 junit 测试通过但在运行整个测试时失败

java - 在livedata回调中调用抽象方法

c++ - 在循环执行之间释放内存

c - Linux - 实时显示内存使用情况