我正在编写一个程序,该程序应该不断地将生成的数据推送到列表传感器队列中。副作用是我最终会耗尽内存。当发生这种情况时,我想删除列表的一部分,在本例中是第一部分,或更旧的一半。我想象如果我遇到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());
}
最佳答案
Is there an easy way to detect an impending OutOfMemoryException then?
您可以使用如下所示的方法来确定最大内存和已使用内存。使用该信息,您可以在程序中定义下一组操作。例如减小其大小或删除一些元素。
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/