我正在编写一个程序,该程序应该将生成的数据不断推送到List sensorQueue中。副作用是我最终将耗尽内存。发生这种情况时,我想删除列表的一部分,在此示例中,是第一部分,或更旧的一半。我想如果遇到OutOfMemeryException
,就不能只使用sensorQueue = sensorQueue.subList((sensorQueue.size() / 2), sensorQueue.size());
,所以我来这里寻找答案。
我的代码:
public static void pushSensorData(String sensorData) {
try {
sensorQueue.add(parsePacket(sensorData));
} catch (OutOfMemoryError e) {
System.out.println("Backlog full");
//TODO: Cut the sensorQueue in half to make room
}
System.out.println(sensorQueue.size());
}
最佳答案
有没有一种简单的方法可以检测即将发生的OutOfMemoryException?
您可以像下面这样确定MAX内存和USED内存。使用这些信息,您可以定义程序中的下一组动作。例如减小其大小或删除一些元素。
final int MEGABYTE = (1024*1024);
MemoryMXBean memoryBean = ManagementFactory.getMemoryMXBean();
MemoryUsage heapUsage = memoryBean.getHeapMemoryUsage();
long maxMemory = heapUsage.getMax() / MEGABYTE;
long usedMemory = heapUsage.getUsed() / MEGABYTE;
希望这会有所帮助!
关于java - 遇到OutOfMemoryException时删除一部分List <>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59804517/