Я работаю над сервером Java, который обрабатывает LOT очень плотного трафика. Сервер принимает пакеты от клиентов (часто много мегабайт) и перенаправляет их другим клиентам. Сервер никогда явно не сохраняет входящие/исходящие пакеты. Тем не менее сервер постоянно сталкивается с OutOfMemoryException
исключениями.
Я добавил System.gc()
в компонент передачи сообщений сервера, надеясь, что память будет освобождена. Кроме того, я установил размер кучи JVM в гигабайт. Я все еще получаю как можно больше исключений.
Итак, мой вопрос таков: как я могу убедиться, что мегабайтные сообщения не находятся в очереди бесконечно (несмотря на то, что они не нужны)? Есть ли способ для меня называть "удалить" на этих объектах, чтобы гарантировать, что они не используют мое пространство кучи?
try
{
while (true)
{
int r = generator.nextInt(100);//generate a random number between 0 and 100
Object o =readFromServer.readObject();
sum++;
// if the random number is larger than the drop rate, send the object to client, else
//it will be dropped
if (r > dropRate)
{
writeToClient.writeObject(o);
writeToClient.flush();
numOfSend++;
System.out.printf("No. %d send\n",sum);
}//if
}//while
}//try