Я новичок в Java и очень нуждаюсь в вашей помощи.
В настоящее время я использую очередь, поток получателя помещает данные в эту очередь, и анализатор считывает из нее.
Но проблема в том, что приемник может получать с невероятной максимальной скоростью, например, . 3000 / сек, в то время как парсер анализирует только на 100 / сек.
РЕДАКТИРОВАТЬ: я проверил, очередь сначала
остается на 100 или около того, а после десяти
секунд он начинает расти на 100 за
во-вторых, и вылетает в 2000 или около того.
Возможно ли, что есть
утечка памяти?
Мой код (в замкнутом цикле)
byte[] data = new byte[1024];
System.arraycopy(udpPacket.getData(), 0, data, 0, 1024);
queue.offer(data);
Куча заполняется слишком быстро, и я получаю исключение вне памяти. Я предполагаю, что проблема в том, что очередь создается с использованием связанного списка, и все указатели должны быть сохранены в куче.
Я знаю версию C, которая делает то же самое (использует буфер), но имеет гораздо лучшую производительность, но из-за проблем развертывания мы можем использовать только Java.