当前位置: 首页 > 面试题库 >

Java程序可以检测到它的堆空间不足吗?

越勇
2023-03-14
问题内容

整个周末,我将在室友的计算机上运行一种遗传算法,恐怕这种长期运行可能会耗尽内存。但是,我的算法以某种方式工作,可以使修剪不太有用的结果变得相当容易,因此,如果有一种方法可以告诉我程序何时将要用完堆空间,那么我可能可以腾出空间并继续寻找还有一些时间。

当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);

  }
}

侦听器是您自己的NotificationListener实现。



 类似资料:
  • 问题内容: 以下代码导致OutOfMemmoryError:大约300万行的堆空间。使用64位安装,分配给JVM的内存为4 GB。 ArrayList引用的内存在while循环的每次迭代中都可以进行垃圾回收,并且由于堆空间的原因,内部JVM 在抛出OutOfMemory错误之前会调用垃圾回收()。 那么为什么会发生异常呢? 问题答案: 是的? 如果是这样,那就是您的问题:An 会对曾经写入过的 每

  • 问题内容: 启动Kafka Connect()后,我的任务在以以下内容启动后立即失败: 在一些Kafka文档中提到堆空间,告诉您使用“默认值”进行尝试,并且仅在出现问题时才对其进行修改,但是没有修改堆空间的说明。 问题答案: 您可以通过设置环境变量来控制最大堆大小和初始堆大小。 以下示例将起始大小设置为512 MB,最大大小设置为1 GB: 当运行Kafka命令(如)时,将调用脚本,该脚本会在环境

  • 即使在相当小的数据集上,我也会遇到堆空间错误。我可以确定我没有耗尽系统内存。例如,考虑一个包含大约20M行和9列的数据集,它占用了磁盘上的1GB。我正在一个具有30gb内存的Google Compute节点上玩它。 假设我在一个名为df的数据框中有这些数据。以下操作很好,但速度有点慢: 下面抛出java。lang.OutOfMemoryError:Java堆空间。 我尝试了这个建议,以增加要激发的

  • 问题:我运行< code>mvn全新安装-dskipstest 并得到 更多信息: > < li> 操作系统:OS X (16 GB内存) Java配置:位于< code > ~/Libraries/Preferences/intelli jide a13/Idea . vmoptins 和< code > Applications/IntelliJ \ Idea \ 13.app/bin/ide

  • 我使用的是Spark独立单机,128G内存,32核。以下是我认为与我的问题相关的设置: 我有一个Spark应用程序,其中有1000个设备的循环。对于每个循环(设备),它准备特征向量,然后调用MLLib的k-Means。在循环的第25次到第30次迭代(处理第25次到第30次设备)时,它遇到了错误“Java.lang.OutOfMemoryError:Java堆空间”。 我试着从0.7到0.35进行记

  • 我面临一些关于内存问题的问题,但我无法解决它。非常感谢您的帮助。我不熟悉Spark和pyspark功能,试图读取大约5GB大小的大型JSON文件,并使用 每次运行上述语句时,都会出现以下错误: 我需要以RDD的形式获取JSON数据,然后使用SQLSpark进行操作和分析。但是我在第一步(读取JSON)本身就出错了。我知道要读取如此大的文件,需要对Spark会话的配置进行必要的更改。我遵循了Apac