Я работаю на сервере Java, который обрабатывает много очень плотного трафика. Сервер принимает пакеты от клиентов (часто много мегабайт) и пересылает их другим клиентам. Сервер никогда явно не хранит какие-либо входящие / исходящие пакеты. Тем не менее, сервер постоянно сталкивается с 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