我是Java的新手,非常需要你的帮助。
目前我正在使用一个队列,一个接收线程将数据放入这个队列中,而解析器从中读取数据。但问题是,接收器可能以惊人的速度接收数据,例如每秒3000次,而解析器只能以每秒100次的速度进行解析。
编辑:我已经检查过了,队列首先停留在100左右,十秒钟后开始以每秒100个的速度增长,并在2000左右崩溃。可能存在内存泄漏吗?
我的代码(在一个紧密的循环中)是:
byte[] data = new byte[1024];
System.arraycopy(udpPacket.getData(), 0, data, 0, 1024);
queue.offer(data);
堆内存被快速填满,导致出现内存溢出异常。我猜问题在于队列是使用链表实现的,所有指针都必须保存在堆中。
我知道有一个使用缓冲区实现相同功能的C版本,但由于部署问题,我们只能使用Java。